В один прекрасный момент, при разработке отчета с выводом в Excel, меня достало переключаться между языками для вызова методов Excel.
Теряется куча времени.
Обернул их в функции 1С написанные на русском языке.
Пример:
// Описание:
// Возвращает структуру со ссылкой на ячейку
//
// Параметры:
// Лист - лист книги Excel куда нужно вставить значение
// Строка - номер строки листа
// Колонка - номер колонки листа
//
// Возвращаемое значение:
// Структура:
// * Ячейка - ссылка на ячейку, куда было помещено значение, для дальнейшего использования
// * Строка - строка ячейки
// * Колонка - колонка ячейки.
//
Функция Екс_ПолучитьЯчейку(Лист,Строка,Колонка)
текЯчейка = новый Структура;
текЯчейка.Вставить("Ячейка",Лист.Cells(Строка,Колонка));
текЯчейка.Вставить("Строка",Строка);
текЯчейка.Вставить("Колонка",Колонка);
Возврат текЯчейка;
КонецФункции
Написал в основном только те функции и методы, которые мне были необходимы. После этого разработка пошла намного быстрее. Не нужно отвлекаться на переключение языка и вспоминать правильное написание той или иной функции Excel.
Были использованы как свои разработки, так и разработки и описания с сайта. Просматривал много информации, поэтому вспомнить все источники не смогу (прошу прощения :) )
один из многих:
1. Код функций ниже:
#Область ПроцедурыЕксель
Процедура Екс_ВставитьМакросВКнигу(КнигаЕксель, ТекстМакроса)
//Пишем макросы в книгу
VBComponents = КнигаЕксель.VBProject.VBComponents;
Кол = VBComponents.Count();
Модуль = VBComponents.Add(1);
Модуль.CodeModule.InsertLines(1,ТекстМакроса);
КонецПроцедуры
Процедура Екс_ВставитьКнопкиУправленияНаЛистExcel(Лист, Заголовок, Макрос, Верхний_УголХ, ВерхнийУголУ, Ширина, Высота, РазмерШрифта, ЦветНадписи)
//Создание Кнопки
Кнопка1=Лист.Buttons.Add(Верхний_УголХ, ВерхнийУголУ, Ширина, Высота);
//первые 2 цифарки (420.5, 12.5, , ) это координаты точки
//вторые 2 цифарки размеры кнопки длина ширина (, , 89.5, 17.5)
Кнопка1.Caption=Заголовок;
Кнопка1.OnAction = Макрос;
Кнопка1.Font.Size = РазмерШрифта;
Кнопка1.Font.Color = ЦветНадписи;
Кнопка1.AutoSize = 1;
КонецПроцедуры
//
// Начертание - 0 - нормальный, 1 - полужирный, 2 - наклонный, 3 - полужирнй/наклонный
Процедура Екс_УстановитьФорматЯчейки(Ячейка, Шрифт = Неопределено,Размер = Неопределено,Начертание = Неопределено,Цвет = Неопределено,Перенос = Ложь,Формат = "@", Рамка = 0)
Если не Шрифт = Неопределено тогда
Ячейка.Font.Name = Шрифт;
КонецЕсли;
Если не Размер = Неопределено тогда
Ячейка.Font.Size = Размер;
КонецЕсли;
Если не Начертание = Неопределено тогда
Если Начертание = 0 тогда
Ячейка.Font.Bold = 0;
Ячейка.Font.Italic = 0;
ИначеЕсли Начертание = 1 тогда
Ячейка.Font.Bold = 1;
Ячейка.Font.Italic = 0;
ИначеЕсли Начертание = 2 тогда
Ячейка.Font.Bold = 0;
Ячейка.Font.Italic = 1;
ИначеЕсли Начертание = 3 тогда
Ячейка.Font.Bold = 1;
Ячейка.Font.Italic = 1;
КонецЕсли;
КонецЕсли;
Если не Цвет = Неопределено тогда
Ячейка.Font.Color = Цвет;
КонецЕсли;
Если не Перенос = Неопределено тогда
Ячейка.WrapText = Перенос;
КонецЕсли;
КонецПроцедуры
Функция Екс_ПолучитьЦветExcelRGB(R,G,B)
Возврат B*256*256 + G * 256 + R;
КонецФункции
// Описание:
// Вставляет значение в указанный лист и ячейку
// можно вставить текстовое значение, число, гиперссылку, формулу
//
// Параметры:
// Лист - лист книги Excel куда нужно вставить значение
// Строка - номер строки листа
// Колонка - номер колонки листа
// Значение - значение помещаемое в ячейку листа (строка, колонка)
// ТипЗначения - Строка - может принимать следующие значения:
// * "Текст"
// * "Ссылка"
// * "Число"
// * "Формула"
// ЛистНазначения - лист книги Excel куда будет вести гиперссылка
//
// Возвращаемое значение:
// Структура:
// * Ячейка - ссылка на ячейку, куда было помещено значение, для дальнейшего использования
// * Строка - строка ячейки
// * Колонка - колонка ячейки.
//
Функция Екс_ВставитьВЯчейку(Лист,Строка,Колонка,Значение, ТипЗначения = "Текст", ЛистНазначения = Неопределено)
текЯчейка = новый Структура;
текЯчейка.Вставить("Ячейка",Лист.Cells(Строка,Колонка));
текЯчейка.Вставить("Строка",Строка);
текЯчейка.Вставить("Колонка",Колонка);
Если ТипЗначения = "Текст" тогда //по умолчанию текст
текЯчейка.Ячейка.Value = Значение;
ИначеЕсли ТипЗначения = "Ссылка" и не ЛистНазначения = Неопределено тогда
//тип ссылка и есть лист назначения
Лист.Hyperlinks.Add(текЯчейка.Ячейка,,"'"+ЛистНазначения.name+"'!R1C1",,Значение);
ИначеЕсли ТипЗначения = "Число" тогда
//
ИначеЕсли ТипЗначения = "Формула" тогда
//
КонецЕсли;
Возврат текЯчейка;
КонецФункции //ВставитьВЯчейку()
// Описание:
// Возвращает структуру со ссылкой на ячейку
//
// Параметры:
// Лист - лист книги Excel куда нужно вставить значение
// Строка - номер строки листа
// Колонка - номер колонки листа
//
// Возвращаемое значение:
// Структура:
// * Ячейка - ссылка на ячейку, куда было помещено значение, для дальнейшего использования
// * Строка - строка ячейки
// * Колонка - колонка ячейки.
//
Функция Екс_ПолучитьЯчейку(Лист,Строка,Колонка)
текЯчейка = новый Структура;
текЯчейка.Вставить("Ячейка",Лист.Cells(Строка,Колонка));
текЯчейка.Вставить("Строка",Строка);
текЯчейка.Вставить("Колонка",Колонка);
Возврат текЯчейка;
КонецФункции
// Объединяет указанную Ячеками область на Листе Excel
Процедура Екс_ОбъединитьЯчейки(Лист,Строка1,Колонка1,Строка2,Колонка2)
Лист.Range(Лист.Cells(Строка1,Колонка1),Лист.Cells(Строка2,Колонка2)).Merge();
КонецПроцедуры
Функция Екс_ПолучитьЛист(КнигаExcel, ИмяНомерЛиста)
Возврат КнигаExcel.WorkSheets(ИмяНомерЛиста);
КонецФункции
Функция ЕксельПолучитьКнигу(ОбъектЕксель, ИмяФайлаЕксель)
Возврат ОбъектЕксель.Workbooks.Open(ИмяФайлаЕксель);
КонецФункции
Функция ЕксельСоздатьОбъект()
Возврат Новый COMОбъект("Excel.Application");
КонецФункции
Процедура Екс_ЗакрытьКнигу(Книга)
Попытка
Книга.Close();
Исключение
КонецПопытки;
КонецПроцедуры
Процедура Екс_ЗакрытьЕксель(ОбъектЕксель)
Попытка
ОбъектЕксель.Quit();
Исключение
КонецПопытки;
КонецПроцедуры
Функция Екс_КоличествоЛистовВКниге(КнигаExcel)
Возврат КнигаExcel.Worksheets.Count;
КонецФункции
Функция ЕксельДобавитьЛистВКнигу(КнигаExcel,ТекущийЛист,ИмяНовогоЛиста)
НовыйЛист = КнигаExcel.WorkSheets.Add(,ТекущийЛист);
НовыйЛист.name = ИмяНовогоЛиста;
Возврат НовыйЛист;
КонецФункции
Процедура Екс_УстановитьВысотуСтроки(Ячейка, ВысотаСтроки)
Ячейка.RowHeight = ВысотаСтроки;
КонецПроцедуры
Функция Екс_ПолучитьИмяЛистаПоНомеру(Книга, НомерЛиста)
Возврат Книга.WorkSheets(НомерЛиста).name;
КонецФункции
Функция Екс_ПолучитьНомерЛистаПоИмени(Книга, ИмяЛиста)
Возврат Книга.WorkSheets(ИмяЛиста).Index;
КонецФункции
Функция Екс_ПоследняяСтрокаВЛисте(Лист)
Возврат Лист.UsedRange.Rows.Count;
КонецФункции
Процедура Екс_ЗафиксироватьОбласть(ОбъектЕксель,Лист,Строка = Неопределено, Колонка = Неопределено)
Лист.Activate();
Если не Строка = Неопределено тогда
ОбъектЕксель.ActiveWindow.SplitRow = Строка;
КонецЕсли;
Если не Колонка = Неопределено тогда
ОбъектЕксель.ActiveWindow.SplitColumn = Колонка;
КонецЕсли;
ОбъектЕксель.ActiveWindow.FreezePanes = 1;
КонецПроцедуры
Функция Екс_ЯчейкаОбъединена(Ячейка)
Возврат Ячейка.MergeCells;
КонецФункции
Функция Екс_ПолучитьЗначениеВЯчейке(Лист,Строка,Колонка)
Возврат Лист.Cells(Строка,Колонка).Value;
КонецФункции
Процедура Екс_УстановитьСнятьЗащитуСЯчейки(Ячейка,Защита = 0)
Попытка
Ячейка.Locked = Защита;
Исключение
КонецПопытки;
КонецПроцедуры
#КонецОбласти
2. Пример использования:
Ексель = ЕксельСоздатьОбъект();
КнигаЕксель = ЕксельПолучитьКнигу(Ексель,ИмяФайла);
ЛистЕксель = Екс_ПолучитьЛист(КнигаЕксель,1);
ЛистНавигации = Екс_ПолучитьЛист(Книга,"Навигация");
текСтрока = 5;
текКолонка = 10;
ЗначЯчейки = Екс_ПолучитьЗначениеВЯчейке(ЛистЕксель,текСтрока,текКолонка);
текЯчейка = Екс_ВставитьВЯчейку(ЛистЕксель,текСтрока,1,"Вариант 1.");
//В текЯчейка вернулась структура ТекЯчейка.Ячейка, ТекЯчейка.Строка, ТекЯчейка.Колонка
Екс_УстановитьФорматЯчейки(текЯчейка.Ячейка,,15,1,Красный);
Екс_УстановитьВысотуСтроки(текЯчейка.Ячейка,16);
Екс_ОбъединитьЯчейки(ЛистЕксель,текЯчейка.Строка,текЯчейка.Колонка,текЯчейка.Строка,текЯчейка.Колонка+5);