Простой способ программного сохранения больших отчетов из СКД в формат Excel
Перерыв весь интернет не смог найти простого способа сохранить отчет с большим числом строк в формате Excel. Везде предлагалось писать процедуры построчной записи, ADO, COMSafeArray и прочее.
Метод же, используемый во всех найденный публикациях "Результат.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX)", не работает при большом числе строк.
Публикация http://infostart.ru/public/77128/ натолкнула на простую идею, которую и реализовал.
- Описание
- Подробнее
Описание
используется следующий простой метод.
1. Сначала сохраняем табличное поле как файл формата «Документ HTML4» (//sale.itcity.ru/public/77128/).
2. Полученный файл программно открываем и пересохраняем в нужном формате Excel.
Для реализации — в реквизиты формы отчета добавляем «ПутьКФайлу» — тип строка, к которому добавим функцию «ПутьКФайлуНачалоВыбора»
&НаКлиенте Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; РежимДиалога = РежимДиалогаВыбораФайла.Сохранение; ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога); ДиалогВыбораФайла.МножественныйВыбор = Ложь; ДиалогВыбораФайла.Заголовок = "Укажите путь выгрузки файла..."; ДиалогВыбораФайла.ПолноеИмяФайла = ПутьКФайлу; ДиалогВыбораФайла.Фильтр = "Excel(2007)(*.xlsx)|*.xlsx"; Если ДиалогВыбораФайла.Выбрать() Тогда ПутьКФайлу = ДиалогВыбораФайла.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры
Также на форму выводим кнопку «ФормаКнопкаСохранитьВЭксель», с командой «СохранитьВЭксель»
&НаКлиенте Процедура СохранитьВЭксель(Команда)
ИмяФайлаHTML4 = СтрЗаменить(ПутьКФайлу,"xlsx","htm");
Результат.Записать(ИмяФайлаHTML4,ТипФайлаТабличногоДокумента.HTML4);
Попытка
ЭксельОбъект = Новый COMОбъект("Excel.Application");
ЭксельОбъект.Application.Visible = Ложь;
Книга = ЭксельОбъект.Application.Workbooks.Open(ИмяФайлаHTML4);
Книга.Windows(1).Visible = Истина;
Книга.Application.DisplayAlerts = False;
Книга.SaveAs(ПутьКФайлу,51);
Книга.Close();
ЭксельОбъект.Application.Quit();
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецПроцедуры
Дополнительно.
Для того чтобы не было потери информации (особенно в части чисел), рекомендуется использовать в 1С, при выводе числовых показателей, следующий формат сумм:
ЧЦ=15; ЧДЦ=2; ЧРД=,; ЧГ=0
P.S. Исправлена строчка кода (приводила к невозможности в некоторых случаях увидеть полученный результат), новая строка выглядит так:
Книга.Windows(1).Visible = Истина;

