gifts2017

Вывод в Excel через COM

Опубликовал Андрей Куришко (boggonzikov) в раздел Программирование - Практика программирования

Была задача, создать через Excel файл, через COM, оформленный «красиво».

Выкладываю примеры кода.

Начнем с простого - создадим СОM-Объект.
Пример функции создания:

// функция устанавливает связь с EXCEL
Функция EXCELСоздатьCOMОбъект() Экспорт

   
Excel = Неопределено;

   
# Если клиент тогда
       
Состояние("Идет установка связи с в Excel ");
   
# КонецЕсли

   
Попытка
       
Excel = Новый COMОбъект("Excel.Application");
    Исключение
       
# Если клиент тогда
           
Сообщить("Ошибка создания обьекта Microsoft Excel" + ОписаниеОшибки(), СтатусСообщения.Внимание);
       
# КонецЕсли
   
КонецПопытки;

    Возврат
Excel;
КонецФункции
//EXCELСоздатьCOMОбъект

Теперь создаем или открываем файл.

ФайлExcel = Excel.Documents.Open("С:\MyExcelFile.xls").

Пример функции создания файла из шаблона.

Функция EXCELОткрытьШаблон(Excel, ИмяФайла) Экспорт

   
ФайлExcel = Неопределено;

    # Если клиент тогда
      
Состояние("Идет открытие файла " + ИмяФайла + " , ждите....." );
   
# КонецЕсли

   
Попытка
       
ФайлEXCEL = Excel.WorkBooks.Add(ИмяФайла);
    Исключение
       
# Если клиент тогда
           
Сообщить("Ошибка создания обьекта Microsoft Excel" + ОписаниеОшибки(), СтатусСообщения.Внимание);
       
# КонецЕсли
   
КонецПопытки;


    Возврат
ФайлExcel;

КонецФункции //EXCELОткрытьШаблон

Получим лист файла Excel

ЛистДанных = ФайлEXCEL.Worksheets(1);
ЛистСодержание = ФайлEXCEL.Worksheets(2);
ЛистДанных.Name = Формат(ТекущаяДата(),"ДФ='dd.MM.yyyy ЧЧ мм'"); //Задаем имя листу

Теперь перейдем к работе с ячейками и диапазоном ячеек.

Ячейка = Cells(НомерСтроки, НомерКолонки) // Получим ячейку
ДиапазонЯчеек = ЛистДанных.Range(ЛистДанных.Cells.Item(НомерСтроки, НомерКолонки), ЛистДанных.Cells.Item(НомерСтроки +1 , НомерКолонки +1) //Получим диапазон ячеек
Ячейка.Value = «Задаем значение в ячейке» // Задаем значение в ячейке

Форматирование ячеек или диапазона ячеек.
Лучше форматировать диапазон ячеек, будет быстрее. Чтобы получить нужный результат создаешь макрос, форматируешь ячейку, смотришь код в макроса.
Значение констант например xlTop, xlToRight из EXCEL. В EXCEL есть VBA - alt+F11 и в нем Object Browser - F2 и в нем поиск.

Ячейка.Font.Size = 12;// Устанавливаем размер шрифта
Ячейка.Font.Name = "Century Gothic"; //Устанавливаем шрифт
Ячейка.Font.ColorIndex = 5;// Устанавливаем цвет
Ячейка.Font.Bold = Истина; // Устанавливаем жирный шрифт
Ячейка.Borders(5).LineStyle = -4142; // Очищаем все границы
Ячейка.Borders(1).LineStyle = 1; // Устанавливаем левую границу
Ячейка.Borders(8).LineStyle = 1; // Устанавливаем верхнюю границу
Ячейка.Borders(9).LineStyle = 1; // Устанавливаем нижнюю границу
Ячейка.Borders(10).LineStyle = 1; // Устанавливаем правую границу
Ячейка.Interior.Color = RGB(51, 153, 102); //цвет фона
Ячейка.HorizontalAlignment = -4131; //Горизонтальное выравнивание текста 4131 -лево 4108 центр -4152 право
Ячейка.VerticalAlignment = -4107; //Вертикальное выравнивание текста
Ячейка.IndentLevel = 6; //Отступ
Ячейка.Merge(Истина); //Объединение ячеек

Создание ссылки 

Лист.Hyperlinks.Add(ДиапазонЯчеек, "", «ИмяОбласти», Гиперссылка, Гиперссылка); // ссылка на именованную область
ЛистExcel.Hyperlinks.add(ЛистExcel.cells(1,1),"","Лист3!A1","","моя ссылка") // ссылка на ячейку
Ячейка.Hyperlinks.Add(Ячейка, //infostart.ru,"" , "infostart.ru " , "infostart.ru "); // ссылка в интернет

См. также

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

Комментарии

1. Виктор Лебедев (eeeio) 04.11.10 10:30
спасибо. скопировал - и думать не пришлось! плюс.
2. Сергей Федоров (Bober777) 08.01.12 15:19
Красота это хорошо а можно пример получить с группировками?
3. Игорь Смирнов (MrVesna) 19.03.12 17:56
Обязательно надо скопировать. Лучше будет для начинающих если еще приведешь примеры с рисунками, хотя и так все понятно. Спасибо!
4. arr arrr (need1cc) 20.03.12 11:21
5. arr arrr (need1cc) 20.03.12 11:21
а все спасибо, разобрлся
6. розница.net (ZLENKO) 26.03.12 13:28
В Excel 2007-2010 жутко тормозит работа с ячейками :-(
7. розница.net (ZLENKO) 19.04.12 11:39
Проблему с "тормозами" в Excel 2007-2010 решил через программную эмуляцию действий КАНТРЭЛ-ЦЭ и КАНТРЭЛ-ВЭ.
Формирую текстовый файл, который надо вывести в Excel (можно вставлять формулы), запихиваю его в буфер обмена и выполняю Paste в предварительно подготовленый лист-макет Excel. Нашел 8 различных способов вывода данных в Excel, но этот мне подошел больше всего т.к. с одной стороны обеспечивает высокую скорость, а с другой позволяет работать с оформлением на листе и использовать заготовки-макеты.
8. Елена К (Ele1234567) 11.04.14 14:10
Спасибо, будемс смотреть и пробовать.
9. Валерий Буданов (buval) 03.02.15 17:00
Спасибо помогли примеры кодов
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа