Зачем это нужно? Дело в том, что при сохранении табличного документа в формате Excel средствами платформы 8.1 файл получается просто неприличных размеров и совершенно непригоден к рассылке. К примеру, прайс-листы с картинками могли иметь размер до 15-20 Мб. После сохранения в формате 2007 размер уменьшался на порядок. В результате я написал процедуру, которая сохраняет MXL в XLSX. Но умные люди посоветовали, что не нужно плодить обработки и процедуры для одного формата. Поэтому я написал более универсальную процедуру, которая в идеале поддерживает все форматы MS Excel 2003 - 2007, в том числе Dbf, Pdf и таблицы Open (Libre) office. Я включил в процедуру наиболее востребованные по моему мнению форматы. Но каждый для себя может добавить необходимые форматы. Как говорится, MSDN Вам в помощь.
Тестировалось на MS Office 2003 с установленным пакетом совместимости и MS Office 2010.
Ниже приведена процедура сохранения табличного документа. Идея проста - табличный документ сохраняется средствами 1С в формате Excel 97, а потом средствами Excel сохраняется в выбранном формате. Прилагается простенькая обработка, демонстрирующая этот метод. Вы можете не скачивать обработку - модуль прост и понятен. А интерфейсную часть реализовать - как Ваша фантазия позволит.
Ограничения:
Необходимо иметь установленный MS Excel 2003 с пакетом совместимости 2007 или MS Excel 2007 - 2010
// константы форматов 2003
// xlCSVWindows = 23;
// xlDBF2 = 7;
// xlDBF3 = 8;
// xlDBF4 = 11;
// xlDIF = 9;
// xlExcel9795 = 43;
// xlTextWindows = 20;
// xlUnicodeText = 42;
// xlWebArchive = 45;
// xlXMLSpreadsheet = 46;
// xlXMLData = 47;
// основные константы 2007
// These are the main file formats in Excel 2007-2010:
// 51 = xlOpenXMLWorkbook (without macro's in 2007-2010, xlsx)
// 52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2010, xlsm)
// 50 = xlExcel12 (Excel Binary Workbook in 2007-2010 with or without macro's, xlsb)
// 56 = xlExcel8 (97-2003 format in Excel 2007-2010, xls)
// 57 = PDF
// 60 = xlOpenDocumentSpreadsheet OpenDocument Spreadsheet
////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ
Перем СоответствиеРасширений;
Перем СоответствиеВерсий;
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
// Запись табличного документа в формате 2007 EXCEL
//
// Параметры
// <пТабДок> - <ТабличныйДокумент> - табличный документ
// <пИмяФайла> - <Строка> - имя исходного файла.
// <пФорматФайла> - <Число> - константа, определяющая формат файла
//
Процедура ЗаписатьMXLВФормате2007(пТабДок, пИмяФайла, пФорматФайла = 51) Экспорт
Если НЕ ЗначениеЗаполнено(пИмяФайла) Тогда Возврат КонецЕсли;
ОбъектФайл = Новый Файл(пИмяФайла);
Расширение = СоответствиеРасширений.Получить(пФорматФайла);
ИмяНовогоФайла = ОбъектФайл.Путь + ОбъектФайл.ИмяБезРасширения + Расширение;
ИмяВременногоФайла = КаталогВременныхФайлов() + Лев(Строка(Новый УникальныйИдентификатор), 8) + ".xls";
пТабДок.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.XLS);
Excel = Новый COMОбъект("Excel.Application");
Если Excel.Version < СоответствиеВерсий.Получить(пФорматФайла) Тогда
Сообщить("В текущей версии Excel выбранный формат файла не поддерживается. Преобразование не выполнено!", СтатусСообщения.Важное);
Excel.Quit();
Excel = Неопределено;
Возврат;
КонецЕсли;
Excel.Visible = Ложь;
Excel.DisplayAlerts = Ложь;//чтобы EXCEL не спрашивал о перезаписи файла
КнигаExcel = Excel.WorkBooks.Open(ИмяВременногоФайла);
Попытка
Если пФорматФайла = 57 Тогда //PDF
КнигаExcel.ExportAsFixedFormat(0, ИмяНовогоФайла, 0);
Иначе
КнигаExcel.SaveAs(ИмяНовогоФайла, пФорматФайла);
КонецЕсли;
Исключение
Сообщить("Не удалось сохранить файл: " + ОписаниеОшибки());
КонецПопытки;
КнигаExcel.Close();
Excel.DisplayAlerts = Истина;
Excel.Quit();
Excel = Неопределено;
УдалитьФайлы(ИмяВременногоФайла);
КонецПроцедуры // ЗаписатьВФормате2007()
////////////////////////////////////////////////////////////////////////////////
// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ОБЪЕКТА
////////////////////////////////////////////////////////////////////////////////
// ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
СоответствиеРасширений = Новый Соответствие;
СоответствиеРасширений.Вставить(51, ".xlsx");
СоответствиеРасширений.Вставить(45, ".mht");
СоответствиеРасширений.Вставить(46, ".xml");
СоответствиеРасширений.Вставить(23, ".csv");
СоответствиеРасширений.Вставить(9, ".dif");
СоответствиеРасширений.Вставить(8, ".dbf");
//работает только в 2007
СоответствиеРасширений.Вставить(47, ".xml");
СоответствиеРасширений.Вставить(57, ".pdf");
СоответствиеРасширений.Вставить(60, ".ods");
СоответствиеВерсий = Новый Соответствие;
СоответствиеВерсий.Вставить(51, "11.0");
СоответствиеВерсий.Вставить(45, "11.0");
СоответствиеВерсий.Вставить(46, "11.0");
СоответствиеВерсий.Вставить(23, "11.0");
СоответствиеВерсий.Вставить(9, "11.0");
СоответствиеВерсий.Вставить(8, "11.0");
//работает только в 2007
СоответствиеВерсий.Вставить(47, "12.0");
СоответствиеВерсий.Вставить(57,"12.0");
СоответствиеВерсий.Вставить(60,"12.0");