0
AAA
16.07.20
✎
12:26
|
Всем доброго дня. Есть известная обработка, которая быстро и правильно сохраняет таблицы MXL в Excel. Она использует Formex и SpreadSheet (Yoksel). Объект "Сервис" из Formex ловит активный контекст и затем это добро сохраняется в Excel. Это все прекрасно работает. Быстро и правильно. Но вот есть отчеты, которые из "Таблица" переделаны в "ТабличныйДокумент" Йокселя. И тут вышла засада. "Сервис" не видит окно с табличным документом. Что тут можно сделать, может кто-то сталкивался? Сделать кнопку выгрузки отчета не предлагать, отчетов много.
|
|
2
Ёпрст
гуру
16.07.20
✎
12:40
|
если последене, то так, например
Перем гТаблица,ВыбНазваниеЛиста,ВыбИмяФайла;
//-----------------------------------------------------------------------------
Функция Проверка ()
Попытка
Сервис = СоздатьОбъект("Сервис");
Исключение
Если ЗагрузитьВнешнююКомпоненту("formex")=0 Тогда
Возврат 0;
КонецЕсли;
КонецПопытки;
Попытка
Табл = СоздатьОбъект("ТабличныйДокумент");
Исключение
Если ЗагрузитьВнешнююКомпоненту ("SpreadSheet.dll")=0 Тогда
Возврат 0;
КонецЕсли;
КонецПопытки;
Сервис = СоздатьОбъект ("Сервис");
Если Сервис.АктивныйКонтекст (гТаблица) = 1 Тогда
Если ТипЗначенияСтр (гТаблица) = "Таблица" Тогда
Возврат 1;
Иначе
Попытка
гТаблица = гТаблица.Таблица;
Возврат 1;
Исключение
КонецПопытки;
КонецЕсли;
КонецЕсли;
Возврат 0;
КонецФункции
//-----------------------------------------------------------------------------
Процедура ВыполнитьСохранение ()
ИмяФайла = ВыбИмяФайла;
ИмяКаталога = ВосстановитьЗначение("ИмяКаталога");
Если ФС.ВыбратьФайл (1, ИмяФайла, ИмяКаталога, "Укажите имя файла", "Книга Microsoft Excel (*.xls)|*.xls|Документ Adobe Acrobat (*.pdf)|*.pdf",
"xls") = 0 Тогда
Возврат;
КонецЕсли;
СохранитьЗначение("ИмяКаталога",ИмяКаталога);
ВыбИмяФайла = ИмяКаталога + ИмяФайла;
Документ = СоздатьОбъект ("ТабличныйДокумент");
Если ТипЗначенияСтр(гТаблица)="Таблица" Тогда
Документ.ЗагрузитьИзТаблицы(гТаблица);
Иначе
врИмя = КаталогВременныхФайлов()+"\"+_GetPerformanceCounter()+"mxl";
гТаблица.Записать(врИмя);
Документ.Открыть(врИмя);
КонецЕсли;
Если Прав(ВыбИмяФайла,3)="xls" Тогда
Конвертер = СоздатьОбъект ("КонвертерExcel");
Книга = Конвертер.Создать ();
Книга.Листы.Добавить (ВыбНазваниеЛиста, Документ);
Книга.ПараметрыКонвертера.РаспознаватьЧисловыеЗначения = 1;
Книга.Записать (ВыбИмяФайла);
Иначе
Конвертер = СоздатьОбъект ("Йоксель.ГрафическийКонвертер.PDF");
Конвертер.ВысотаСтраницы = 297*56.7;
Конвертер.ШиринаСтраницы = 210*56.7;
Конвертер.КоличествоБитНаПиксел = 24;
Конвертер.Документ = Документ;
Конвертер.ПолеСлева = 0;
Конвертер.ПолеСверху = 0;
Конвертер.ПолеСправа = 0;
Конвертер.ПолеСнизу = 0;
Конвертер.ЗаписатьВФайл (ВыбИмяФайла);
КонецЕсли;
КонецПроцедуры
//-----------------------------------------------------------------------------
Процедура СохранитьТаблицу ()
Попытка
ВыполнитьСохранение ();
Исключение
Предупреждение ("Не удалось выполнить сохранение: " + ОписаниеОшибки() + " Возможно, указано неверное имя файла или " +
"файл, куда выполняется сохранение, открыт",60);
КонецПопытки;
КонецПроцедуры
Процедура ПриОткрытии ()
СтатусВозврата(0);
Если Проверка () = 0 Тогда
Возврат;
Сообщить ("Обнаружены ошибки - сохранение таблицы будет недоступно");
КонецЕсли;
ВыбНазваниеЛиста = "Лист 1";
СохранитьТаблицу ();
КонецПроцедуры
|
|