Имя: Пароль:
1C
1С v8
HELP: выгрузка в Эксель
0 листопад
 
04.05.14
01:13
Почему при выгрузке в Эксель, файл содержит только одну строчку? И то:
ИНН в ней отображается как 7,02281E+11, а в Коде съедает первые нули?
Вот код:


Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    НаимГруппы = "Агенты";
    ГруппаФЛ = Справочники.ФизическиеЛица.НайтиПоНаименованию(НаимГруппы);
    
    Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ФизическиеЛица.Код,
    |    ФизическиеЛица.Наименование,
    |    ФизическиеЛица.Родитель,
    |    ФизическиеЛица.ПометкаУдаления,
    |    ФизическиеЛица.ИНН
    |ИЗ
    |    Справочник.ФизическиеЛица КАК ФизическиеЛица
    |ГДЕ
    |    ФизическиеЛица.Родитель = &Группа
    |    И ФизическиеЛица.ПометкаУдаления = ЛОЖЬ"
    ;
    
    Запрос.УстановитьПараметр("Группа", ГруппаФЛ);
    Результат = Запрос.Выполнить().Выгрузить();
    
    Для Каждого Строка ИЗ Результат Цикл
        
        // *********************************
        // Подключаемся к Excel
        Подключено = Ложь;
        
        Попытка
            ExcelПриложение = Новый COMОбъект("Excel.Application");
            Подключено = Истина;
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
        
        Книга = ExcelПриложение.WorkBooks.Add();
        Лист = Книга.WorkSheets(1);
        Лист.Cells(1, 1).Value = Строка.Код;
        Лист.Cells(1, 2).Value = Строка.Наименование;
        Лист.Cells(1, 3).Value = Строка.ИНН;
        
    КонецЦикла;
    
    ФайлНаДиске = Новый Файл("C:\Файл.xlsx");
    
    Попытка
        ExcelПриложение.DisplayAlerts = False;
        Книга.SaveAs(ФайлНаДиске.ПолноеИмя);
        ExcelПриложение.ActiveWorkbook.Close();
        ExcelПриложение.Quit();
        
        Сообщить("Файл выгружен успешно: "  + ФайлНаДиске.ПолноеИмя);
    Исключение
        Сообщить("Ошибка записи данных файла: " + ФайлНаДиске.ПолноеИмя);
        Сообщить(ОписаниеОшибки());
        Попытка
            ExcelПриложение.Quit();
        Исключение
        КонецПопытки;
    КонецПопытки;
    //**********************************
    
КонецПроцедуры
1 шаэс
 
04.05.14
01:28
Вы работу с приложением откуда–то взяли? В цикле создаете каждый раз книгу, каждый раз одним и тем же ячейкам присваиваете значения, чего тогда хотите много строк?
2 листопад
 
04.05.14
01:32
(1) Да, скопировала пример. Обычно я загрузку в Эксель делаю. А тут выгрузка... Так что мне поправить?
3 листопад
 
04.05.14
01:33
Все разобралась. Спасибо!
4 листопад
 
04.05.14
01:36
Только что делать с обрезанными нулями и ИНН???
5 шаэс
 
04.05.14
01:40
(4) ну как–нибудь формат к строке привести. А то ж как число воспринимает
6 листопад
 
04.05.14
01:44
Проблемы с ИНН и обрезанными нулями в Коде - актуальны. Вот мой итоговый код:


Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    НаимГруппы = "Агенты";
    ГруппаФЛ = Справочники.ФизическиеЛица.НайтиПоНаименованию(НаимГруппы);
    
    Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ФизическиеЛица.Код,
    |    ФизическиеЛица.Наименование,
    |    ФизическиеЛица.Родитель,
    |    ФизическиеЛица.ПометкаУдаления,
    |    ФизическиеЛица.ИНН
    |ИЗ
    |    Справочник.ФизическиеЛица КАК ФизическиеЛица
    |ГДЕ
    |    ФизическиеЛица.Родитель = &Группа
    |    И ФизическиеЛица.ПометкаУдаления = ЛОЖЬ"
    ;
    
    Запрос.УстановитьПараметр("Группа", ГруппаФЛ);
    
    Результат = Запрос.Выполнить().Выгрузить();
    
    // Подключаемся к Excel
    Подключено = Ложь;
    
    Попытка
        ExcelПриложение = Новый COMОбъект("Excel.Application");
        Подключено = Истина;
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    Книга = ExcelПриложение.WorkBooks.Add();
    Лист = Книга.WorkSheets(1);
    
    НС=1;
    Для Каждого Строка ИЗ Результат Цикл
        
        Лист.Cells(НС, 1).Value = Строка.Код;
        Лист.Cells(НС, 2).Value = Строка.Наименование;
        Лист.Cells(НС, 3).Value = Строка.ИНН;
        
        НС=НС+1;
    КонецЦикла;
    
    ФайлНаДиске = Новый Файл("C:\Файл.xls");
    
    Попытка
        ExcelПриложение.DisplayAlerts = False;
        Книга.SaveAs(ФайлНаДиске.ПолноеИмя);
        ExcelПриложение.ActiveWorkbook.Close();
        ExcelПриложение.Quit();
        
        Сообщить("Файл выгружен успешно: "  + ФайлНаДиске.ПолноеИмя);
    Исключение
        Сообщить("Ошибка записи данных файла: " + ФайлНаДиске.ПолноеИмя);
        Сообщить(ОписаниеОшибки());
        Попытка
            ExcelПриложение.Quit();
        Исключение
        КонецПопытки;
    КонецПопытки;
    
КонецПроцедуры
7 шаэс
 
04.05.14
01:55
(6) ну, не знаю. Прочтите это, может поможет
http://infostart.ru/public/269722/
8 листопад
 
04.05.14
01:59
Проблему решила, установила текстовый формат:

НС=1;
    Для Каждого Строка ИЗ Результат Цикл
        
        Лист.Cells(НС, 1).NumberFormat = "@";
        Лист.Cells(НС, 2).NumberFormat = "@";
        Лист.Cells(НС, 3).NumberFormat = "@";

        Лист.Cells(НС, 1).Value = Строка.Код;
        Лист.Cells(НС, 2).Value = Строка.Наименование;
        Лист.Cells(НС, 3).Value = Строка.ИНН;
        
        НС=НС+1;
    КонецЦикла;
9 шаэс
 
04.05.14
02:01
(8) а вот гораздо же быстрее и лучше получается, когда никто не подсказывает, правда же?
10 листопад
 
04.05.14
02:02
Теперь увидела другую проблему: при открытии Эксель-файла, вместе с ним почему-то всегда открывается файл под названием Книга2(3,4,5,6 и т.д., при каждом открытии число увеличивается). Что это?
11 skunk
 
04.05.14
06:14
неудачно закрытые книги ... например при отладке остановка до ExcelПриложение.Quit();
12 Web00001
 
04.05.14
06:44
Вывести в табличный документ с каким угодно форматированием, быстро и просто. После этого сохранить в эксель и не е..ть мозг себе и людям не?
13 шаэс
 
04.05.14
09:24
(12) а Вы так же делаете, когда получаете заказ на выгрузку, например, в банк в формате эксель? Просите бухгалтера сформировать табличку и сохранить ее?
14 m-serg74
 
04.05.14
09:44
(13) что мешает программно?
15 Web00001
 
04.05.14
09:45
(13)В чем проблема я не догнал? И причем здесь бухгалтер?
Нарисовал нужный макет. Вывел туда данные. Только не показывай на экран получившийся табличный документ а записывай его как эксель. Получится аккуратно и красиво. Уж гораздо лучше чем ты самостоятельно будешь писать отдельно в каждую ячейку. И проще. Непонятно какой смысл ерундой заниматься.
16 m-serg74
 
04.05.14
09:46
(15) не шарит :)
17 шаэс
 
04.05.14
10:03
(15) ну вот и спасибо.
(16) ага, не шарю
18 Torquader
 
04.05.14
19:24
(10) Чудо! Когда Excel открывается - он создаёт книгу по умолчанию - нужно не забывать его закрыть.
19 Torquader
 
04.05.14
19:25
Если выводить в Excel всё, как строки, то будут правильные строки.
Основная теорема систематики: Новые системы плодят новые проблемы.