Сохранение табличных документов 8.1 в различных форматах MS Excel 2003-2007

03.10.11

Интеграция - Загрузка и выгрузка в Excel

Как известно, 1С:Предприятие 8.1 имеет довольно ограниченное количество форматов в которых можно сохранить табличный документ. Вашему вниманию предлагается простая процедура, которая восполняет в какой-то мере этот недостаток.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки для того, чтобы самостоятельно ее доработать для вашей базы данных. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в вашей базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке Купить один файл
Сохранение в формате 2007
.epf 9,53Kb
76
76
1 SM
Скачать Купить за 1 850 руб.

Зачем это нужно? Дело в том, что при сохранении табличного документа в формате 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");

См. также

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка номенклатуры из файлов Excel (xls, xlsx, ods, csv, mxl) в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 руб.

29.10.2014    213643    635    526    

449

SALE! 20%

Загрузка и выгрузка в Excel Оптовая торговля Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 Конфигурации 1cv8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С одним нажатием. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

5000 4000 руб.

09.11.2016    219704    947    886    

957

Маркетплейсы Загрузка и выгрузка в Excel Программист Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Управленческий учет Платные (руб)

Загрузка данных отчета о реализации товаров из сервиса Яндекс.Маркета «Беру» в 1С из Отчетов Excel для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11 и Управление нашей фирмой, редакция 3.0 в документ «Отчет комиссионера о продажах».

4800 руб.

09.12.2020    23636    226    1    

93

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы сделаете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, "Детский мир", МагнитЭкспресс (бывш.Казань-Экспресс), "Леруа Мерлен", ЭНФАНТА (Акушерство), ЛаМода, Летуаль, "Твой дом" в документы "Отчет комиссионера (агента) о продажах" и другие, может работать в "Бухгалтерия 3", "Бухгалтерия 3 КОРП", УТ 11, УНФ, КА 2, ERP. Возможность подключить любые маркетплейсы. Анализ продаж ОЗОН. 30 дней БЕСПЛАТНОГО пользования!

1800 руб.

12.08.2021    33364    271    65    

138

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 09.04.2024, версия 9.9 - 9.10)

14400 руб.

20.11.2015    153051    371    376    

505

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Загрузка данных отчета о реализации товаров из сервиса СберМегаМаркет для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11 и Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

4800 руб.

07.06.2022    16021    93    0    

73
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cool.vlad4 2 01.10.11 15:04 Сейчас в теме
Была же функция сохранения, но только в pdf? Я думаю они не сильно отличаются...
2. ediks 336 01.10.11 15:34 Сейчас в теме
(1) Как-то не прижилась рассылка в PDF. Нужен именно Excel.
Хотя PDF у нас тоже используется, но для других целей.
3. cool.vlad4 2 01.10.11 15:37 Сейчас в теме
(2) ну, я немного не то имел ввиду;-)
4. ediks 336 01.10.11 15:45 Сейчас в теме
(3) Если имеется в виду Надстройка 2007 Microsoft Office: сохранение в формате PDF (Майкрософт), то она устанавливается только для 2007. Для MS Office 2003 такой надстройки нет. А у нас в основном используется 2003.
Но, наверное, можно применить точно такой же принцип и для PDF. Только надо найти константу формата при использовании SaveAs :)
5. cool.vlad4 2 02.10.11 20:46 Сейчас в теме
(4) Как раз на это я и намекал
Но, наверное, можно применить точно такой же принцип и для PDF. Только надо найти константу формата при использовании SaveAs :)
с точностью до наоборот ...на портале уже 2 или 3 раза публиковали ф-цию сохранения в pdf. Отличаются они несильно. Я, то не против нет...но как мне кажется нерационально для каждого формата по статье.
13. ediks 336 03.10.11 20:49 Сейчас в теме
(5) А такой вариант годится?
14. cool.vlad4 2 03.10.11 20:52 Сейчас в теме
(13) ну, вот, теперь больше нет необходимости делать по статье на каждый формат
6. cool.vlad4 2 02.10.11 20:51 Сейчас в теме
Вот кстати и совет - напишите сразу ф-цию сохранения в разные форматы - pdf, csv, чего там еще, xml - для полноты картины.
7. Angeros 03.10.11 05:17 Сейчас в теме
Т.е. как я понял процедура берет xls открывает его втихую екселем и сохраняет как xlsx.

Кстати у метода есть ограничения. попробуйте проделать такой фокус с таблой где число колонок более 256 либо строк более чем 65535.
8. Yashazz 4759 03.10.11 10:36 Сейчас в теме
(7) Кстати да, а для таблицы, например, в 80000 строк есть шансы сохранить в эксель? Чтоб сразу в xlsx безо всяких скрытных открытий-переоткрытий через com? Например, получается ли через ADO или, допустим, csv (не как текстовый)?
10. Angeros 03.10.11 13:16 Сейчас в теме
(8)Лично не пробовал но через ком или адо проблем не должно быть.
9. ediks 336 03.10.11 10:41 Сейчас в теме
(7) Естественно, ограничение по количеству колонок и строк никто не отменял. Но это ограничение скорее не метода, а MS Excel до версии 2003 включительно. В 2007 ограничения не такие жесткие - 16к колонок и 1М строк.
Если есть метод сохранить MXL в XLS средствами платформы 8.1, обходящий это ограничение - в студию.
11. Vitaslon 03.10.11 19:37 Сейчас в теме
а чем вам мешает штатный механизм? через файл-сохранить копию
12. ediks 336 03.10.11 20:06 Сейчас в теме
(11) Через штатный механизм файл получается очень большим, я это подробно описал в начале статьи. Попробуйте MXL сохранить средствами платформы 8.1, а потом сохранить в формате xlsx в Excel. Только файл возьмите размером в несколько Мб, чтобы почувствовать разницу.
15. Vitaslon 03.10.11 21:02 Сейчас в теме
(12)
извеняюсь
читал быстро, и видемо это я пропустиЛ)
16. Tokiy 131 31.10.11 22:19 Сейчас в теме
Спасибо, ediks, очень пригодилась статья!
17. Santur 8 05.12.11 19:07 Сейчас в теме
В 2003 есть вот такая константа
//  xlDBF3 = 8;
,
а вот в 2010 офисе этот формат не прокатывает, постоянно выдает ошибку
Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Excel): Метод SaveAs из класса Workbook завершен неверно

Можно ли в 2010 офисе сохранить в формате xlDBF3 ???
18. ediks 336 06.12.11 09:38 Сейчас в теме
(17) Сейчас попробовал под Excel 2003 сохранить mxl в DBF III - все ОК. Вечером попробую под 2010. Не пробовали mxl сохранить в xls, а потом в Excel сохранить в DBF III? Может Excel в принципе не может сохранить такой файл? Может какие-нибудь заголовки мешают? По идее, в файле должны быть только колонки данных без всяких красивостей и т.д. и т.п.
20. Santur 8 06.12.11 11:59 Сейчас в теме
(18) я из 1С сохраняю в xls и потом открываю этот xls и пытаюсь сохранить в dbfIII
oBook.SaveAs(КаталогЭкспортаДанных+"\"+ИмяDbfФайла, 8, , , , , , , , 866);

Файл Excel выглядит след. образом
зы: аттач - выгрузка в xls из демо базы ЗУП
21. ediks 336 06.12.11 13:24 Сейчас в теме
(20) Попробуйте удалить строки в файле с 1 по 6 и сохранить в ДБФ. Что получится? Я писал в (19), что удалил заголовки и у меня сохранился ДБФ.
22. Santur 8 07.12.11 11:27 Сейчас в теме
(21) удалил сверху непосредственно все, до лиц. счетов, ФИО и сумм...и все равно собака выдает ошибку "....Метод SaveAs из класса Workbook завершен неверно"
я начинаю подозревать, что причина в том, что у ячеек не указан формат, т.е. в mxl он не заполнен, если смотреть в xls, то стоит общий.
23. ediks 336 07.12.11 21:08 Сейчас в теме
(22) тут ничего не могу сказать - пути Microsoft неисповедимы. Если сам Великий и Ужасный Excel не может сохранить свой xls, то никакая обработка 1С не спасет.
19. ediks 336 06.12.11 09:53 Сейчас в теме
(17) Попробовал конвертировать файл отчета с заголовком - получил ошибку SaveAs. Удалил заголовки - все ОК.
24. SpartakM 71 07.02.12 22:25 Сейчас в теме
Подскажите, а если нет установленного Excel на компьютере, а при сохранении средствами платформы, создается файл 20мб, и картинки все "съезжают" со своих мест. Если сохранять этот же файл опен офисом, через сохранить как, устанавливаю тот же формат (Excel 2003-2007), и размер файла уменьшается до 2-3мб.
Так вот, вопрос, может знаете, как сохранять, чтобы файл сразу создавался размером 2-3мб, а не 20мб.
25. ediks 336 08.02.12 07:27 Сейчас в теме
(24) Как уменьшить средствами 1С размер файла я не знаю. В самом Excel 2003 где-то есть пункт меню - сжать картинки. Платформа 8.2 умеет сохранять в формате Excel 2007.
26. andru_dv 15.02.12 00:31 Сейчас в теме
Спасибо, полезная обработка!
27. Seven2000 29.03.12 11:34 Сейчас в теме
Здравствуйте!

А как Word-овский документ, созданный в 1С, сохранить в PDF?
28. ediks 336 29.03.12 19:56 Сейчас в теме
(27) Указать в параметрах пФорматФайла = 57 процедуры Процедура ЗаписатьMXLВФормате2007(пТабДок, пИмяФайла, пФорматФайла = 51). Но это прокатит только в Office 2007 и старше
Оставьте свое сообщение