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

03.10.11

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Сохранение в формате 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");

См. также

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С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

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

6000 5100 руб.

09.11.2016    237453    1072    904    

1010

SALE! 30%

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

Универсальная программа для распознавания сканов или фото товарных документов в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

8400 5880 руб.

04.06.2019    108208    315    173    

326

Загрузка и выгрузка в 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 1С:Розница 3.0 Платные (руб)

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

16800 руб.

20.11.2015    157204    379    378    

514

Загрузка и выгрузка в 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. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

11100 руб.

29.10.2014    217438    662    527    

457

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

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

4800 руб.

23.01.2022    11388    56    0    

38

SALE! 30%

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

Расширение Умная Супер скоростная загрузка номенклатуры с умным авто поиском и авто сопоставлением миллионов реквизитов, Вы когда-нибудь слышали, что за 3 минуты можно в базу загрузить тысячу позиций номенклатуры, установить свойства характеристики с изображениями и сделать на основе их поступление и заодно создать документ установка цен и сделать документ заказ покупателя. На первый взгляд это кажется фантастикой, потому что все мы привыкли кропотливо заливать номенклатуру или манипулировать новыми документами на основе их. Это расширение позволяет выполнить все задачи моментально.

9990 6993 руб.

11.08.2023    5065    31    5    

34
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cool.vlad4 2 01.10.11 15:04 Сейчас в теме
Была же функция сохранения, но только в pdf? Я думаю они не сильно отличаются...
2. ediks 337 01.10.11 15:34 Сейчас в теме
(1) Как-то не прижилась рассылка в PDF. Нужен именно Excel.
Хотя PDF у нас тоже используется, но для других целей.
3. cool.vlad4 2 01.10.11 15:37 Сейчас в теме
(2) ну, я немного не то имел ввиду;-)
4. ediks 337 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 337 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 4800 03.10.11 10:36 Сейчас в теме
(7) Кстати да, а для таблицы, например, в 80000 строк есть шансы сохранить в эксель? Чтоб сразу в xlsx безо всяких скрытных открытий-переоткрытий через com? Например, получается ли через ADO или, допустим, csv (не как текстовый)?
10. Angeros 03.10.11 13:16 Сейчас в теме
(8)Лично не пробовал но через ком или адо проблем не должно быть.
9. ediks 337 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 337 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 337 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 337 06.12.11 13:24 Сейчас в теме
(20) Попробуйте удалить строки в файле с 1 по 6 и сохранить в ДБФ. Что получится? Я писал в (19), что удалил заголовки и у меня сохранился ДБФ.
22. Santur 8 07.12.11 11:27 Сейчас в теме
(21) удалил сверху непосредственно все, до лиц. счетов, ФИО и сумм...и все равно собака выдает ошибку "....Метод SaveAs из класса Workbook завершен неверно"
я начинаю подозревать, что причина в том, что у ячеек не указан формат, т.е. в mxl он не заполнен, если смотреть в xls, то стоит общий.
23. ediks 337 07.12.11 21:08 Сейчас в теме
(22) тут ничего не могу сказать - пути Microsoft неисповедимы. Если сам Великий и Ужасный Excel не может сохранить свой xls, то никакая обработка 1С не спасет.
19. ediks 337 06.12.11 09:53 Сейчас в теме
(17) Попробовал конвертировать файл отчета с заголовком - получил ошибку SaveAs. Удалил заголовки - все ОК.
24. SpartakM 73 07.02.12 22:25 Сейчас в теме
Подскажите, а если нет установленного Excel на компьютере, а при сохранении средствами платформы, создается файл 20мб, и картинки все "съезжают" со своих мест. Если сохранять этот же файл опен офисом, через сохранить как, устанавливаю тот же формат (Excel 2003-2007), и размер файла уменьшается до 2-3мб.
Так вот, вопрос, может знаете, как сохранять, чтобы файл сразу создавался размером 2-3мб, а не 20мб.
25. ediks 337 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 337 29.03.12 19:56 Сейчас в теме
(27) Указать в параметрах пФорматФайла = 57 процедуры Процедура ЗаписатьMXLВФормате2007(пТабДок, пИмяФайла, пФорматФайла = 51). Но это прокатит только в Office 2007 и старше
Оставьте свое сообщение