gifts2017

Выгрузка в Excel (эксель)

Опубликовал Timeforlive S (timeforlive) в раздел Программирование - Инструментарий

Обработка (обычные формы) по выгрузке данных из 1С в Excel (только для программистов).
Работа с файлом Excel из 1С (COM-соединение).

Обработка позволяет редактировать ячейки и параметры страницы (для области печати, например)  Excel.

Это не готовая обработка, которую можно сразу брать и пользоваться, она предназначена для получения готового кода (процедур и функций).

Вот параметры процедур для работы с ячейками:

Процедура ЗаполнитьПолеЭксель(
	комментарийКод = "пусто",
	Ячейка, 					
	Значение = "(не заполнять)", 			
					// шрифт
	шрифтНазвание = "Arial",
	шрифтРазм = 8,
	шрифтКурсив = 0,
	шрифтЖирн = 0,
	шрифтПодчеркивание = -1,
					// формат текста
	горизонталь = 3,
	вертикаль = 2,		
	перенос = 0,
	ориентация = 0,
					// формат границы ячейки
	линия = 1,
					// формат ячейки
	ширина = "по умолчанию",				// в Excel - 8
	высота = "по умолчанию", 				// в Excel - 14.40
					// цвет
	цветШрифта = -1,
	цветЯчейки = -1,
	цветГраницы = -1,
	формула = -1,
	формат = -1,
	границы = "00000000",
	стильГраницы = 1,
	высотаГраницы = 0
	)
Процедура ПараметрыСтраницы(
ОбъектЭксель, // Объект Excel (для обращения к функциям Экселя)
Страница, // Страница (объект Excel)
ШапкаЛево = "", // LeftHeader = ""
ШапкаЦентр = "", // CenterHeader = "&""-,Bold""&12&F" & Chr(10) & "&A"
ШапкаПраво = "", // RightHeader = ""
ПодвалЛево = "", // LeftFooter = "&9&Z&F"
ПодвалЦентр = "", // CenterFooter = ""
ПодвалПраво = "", // RightFooter = "&P/&N"
ОтступЛево = 0.5, // LeftMargin = Application.InchesToPoints(0.7)
ОтступПраво = 0.2, // RightMargin = Application.InchesToPoints(0.7)
ОтступВерх = 1.5, // TopMargin = Application.InchesToPoints(0.75)
ОтступНиз = 2.4, // BottomMargin = Application.InchesToPoints(0.75)
ОтступШапка = 1.3, // HeaderMargin = Application.InchesToPoints(0.3)
ОтступПодвал = 0.8, // FooterMargin = Application.InchesToPoints(0.3)
ПечатьВерхушка = ЛОЖЬ, // PrintHeadings = False
ПечатьГраницы = ИСТИНА, // PrintGridlines = True
ПечатьКомментарии = -4142, // PrintComments = xlPrintNoComments
ПечатьКачество = 300, // PrintQuality = 600
ЦентрироватьГоризонталь = ИСТИНА, // CenterHorizontally = True
ЦентрироватьВертикаль = ЛОЖЬ, // CenterVertically = False
Ориентация = 1, // Orientation = xlLandscape
Драфт = ЛОЖЬ, // Draft = False
РазмерСтраницы = 9, // PaperSize = xlPaperLetter
НумерацияПервойСтраницы = -4105, // FirstPageNumber = xlAutomatic
Ордер = 1, // Order = xlDownThenOver
ЧерноБелое = ЛОЖЬ, // BlackAndWhite = False
Увеличение = 100, // Zoom = False
СтраницПоШирине = 1, // FitToPagesWide = 1
СтраницПоВысоте = 1, // FitToPagesTall = False

 

Также внутри можно найти пару полезностей, типа Генерации случайных названий, процедуру РГБ (RGB) для Excel'a и прочее.

 

Обработка содержит около 1500 полезного кода. Есть комментарии к процедурам и функциям по работе с параметрами и возвращаемыми значениями.

 

Дополнительная информация к публикации.

1. Тема на форуме Infostart'a (автор: Светлый ум):

Программно открыть файл Excel 

мИмяШаблона= "ШаблонРеестр";    
    ФайлОбработки = Новый Файл(ИспользуемоеИмяФайла);
    
    //1) Заходим в Excel    
    Excel = Новый COMОбъект("Excel.Application");
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
    ИмяВременногоФайла2 = ПолучитьИмяВременногоФайла("xlsx");
    ДвоичныеДанные = ПолучитьМакет("ШаблонExcel");
    ДвоичныеДанные.Записать(ИмяВременногоФайла);
    Книга = Excel.WorkBooks.Open(ИмяВременногоФайла);
    Лист = Книга.WorkSheets(1);
    
    //2) Как-то редактируем Excel
    ШапкаОтчетаОбласть = Лист.Range("Шапка");
    ШапкаОтчетаОбласть.Find("<ДатаОтчета>").Value = Строка(Формат(СсылкаНаОбъект.ПолучитьОбъект().Дата, "ДЛФ=ДД"));
        
    //3) Сохраняем Excel 
    Книга.SaveAs(ИмяВременногоФайла2);  
    УдалитьФайлы(ИмяВременногоФайла);
    
    // 4) Открываем Excel, для редактирования пользователем
    Excel.Visible    = Истина;

 

2. Тема на форуме Infostart'a (автор ответа: gfiji):

Как запустить макрос, записанный в книге Microsoft Excel 

Попытка 

    // Создать объект. 
    Excel = Новый COMОбъект("Excel.Application"); 

Исключение 
    Сообщить("Не удалось инициализировать Excel"); 
    Возврат; 
КонецПопытки; 

Попытка 

    // В реальном примере путь может быть совершенно другим. 
    Excel.Workbooks.Open("c:\doc.xls"); 

    // Запустить макрос с именем "Оформление".
    Excel.Run("Оформление"); 
    Excel.Visible = Истина; 

Исключение 

    // Если произойдет ошибка выводятся данные об ошибке и объект закрывается. 
    Сообщить(ОписаниеОшибки()); 
    Excel.Quit(); 
КонецПопытки; 

 

3. Тема на форуме Infostart'a (автор ответа: jefti):

Как создать документ программы Microsoft Excel по оформлению, приведенному в другом документе 

Попытка 

    // Создать объект. 
    Excel = Новый COMОбъект("Excel.Application"); 

Исключение 
    Сообщить("Не удалось инициализировать Excel"); 
    Возврат; 
КонецПопытки; 

Попытка 

    // Если при отработке следующего фрагмента кода произойдет ошибка объект "Excel.Application" будет закрыт. 

    // Открыть книгу, содержащую шаблон оформления. 
    Excel.Workbooks.Open("c:\doc.xls"); 
    НомерКниги = Excel.Workbooks.Count; 
    Книга = Excel.Workbooks.Item(НомерКниги); 
    Лист = Excel.ActiveSheet; 

    // Создать новую книгу (в нее будем записывать данные). 
    Excel.Application.Workbooks.Add(1); 
    НомерКниги = Excel.Workbooks.Count; 
    КнигаНовая = Excel.Workbooks.Item(НомерКниги); 
    ЛистНовый = Excel.ActiveSheet; 

    // Установить ширину колонки в новой книге. 
    ЛистНовый.Columns("B").ColumnWidth = 40; 

    // Копировать область из книги-шаблона в новую книгу. 
    Лист.Range("Шапка").Copy(ЛистНовый.Range("A1:E3")); 
    ЛистНовый.Cells(1, 1).Value = "Наименование контрагента"; 

    // Считаем, что в нашем случае необходимо сформировать только две строки табличной части 
    Для НомерСтроки = 1 По 2 Цикл 
        Лист.Range("Строка").Copy(ЛистНовый.Range(ЛистНовый.Cells(3 + НомерСтроки,1), ЛистНовый.Cells(3 + НомерСтроки, 5))); 

        // Записать значение в ячейку листа новой таблицы 
        // в реальном примере данные будут браться из информационной базы 
        ЛистНовый.Cells(3 + НомерСтроки, 1).Value = НомерСтроки; 
        ЛистНовый.Cells(3 + НомерСтроки, 2).Value = "Наименование номенклатурной позиции " + Строка(НомерСтроки); 
        ЛистНовый.Cells(3 + НомерСтроки, 3).Value = НомерСтроки; 
        ЛистНовый.Cells(3 + НомерСтроки, 4).Value = НомерСтроки; 
        ЛистНовый.Cells(3 + НомерСтроки, 5).Value = НомерСтроки; 
    КонецЦикла; 

    Excel.Visible = Истина; 

Исключение 
    Сообщить(ОписаниеОшибки()); 
    Excel.Quit(); 
КонецПопытки; 

При наличии полезной информации, укажите ссылку в комментах, пожалуйста.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Выгрузка_в_Эксель
.epf 31,40Kb
09.06.15
21
.epf 31,40Kb 21 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Константин Куликов (Светлый ум) 21.12.15 12:48
Качественно оформленная статья +1
От себя добавлю пару плюшек:


//### Примеры работы с Excel ячейками ###

//1) Стандартное форматирование числа
// mSheet.Cells(row,i).Value=Формат(стр[мИмя],"ЧДЦ=2; ЧН=; ЧГ=0");

//2) Стандартное форматирование даты
// ШапкаОтчета.Find("<ДатаОтчета>").Value = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");

//3)Программная установка формул в ячейку - Excel в 1с.
а) Например, нужно посчитать сумму в столбце 8 в той же строке из столбца 1+ столбца 2.
СтрокаСФормулой = "=RC[-7]+ RC[-6]";
Лист.Cells(НомерСтроки,НомерКолонки).Formula = СтрокаСФормулой.
---------------------
б) Считаем итого по строкам:
//Шаблон формулы: "=SUM(F13:F14)";
СтрокаСФормулойИтогоОстатки = "=SUM(F" + Строка(НомерИсходнойСтрокиОстаткиОборотыExcel) +
":F" + Строка(НомерСтрокиОстаткиОборотыДляФормулы) + ")";

ТекСтрокаПодвалИтогоОстаток.Value = СтрокаСФормулойИтогоОстатки;
timeforlive; +1 Ответить
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа