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


Обработка (обычные формы) по выгрузке данных из 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();
КонецПопытки; 

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

1 Comment

  1. Светлый ум

    Качественно оформленная статья +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 = СтрокаСФормулойИтогоОстатки;

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *