Внешняя компонента для загрузки файлов Excel 2007-2010 (OpenXML) в табличный документ 1С 8

Внешняя компонента для прямого чтения файла формата OpenXML (Excel 2007-2010) и загрузки рабочего листа в табличный документ "1С:Предприятие 8" с полным сохранением оформления.

Как и большинство программистов 1С я часто сталкивался с необходимостью загрузки электронных таблиц в 1С. Была освоена и объектная модель Excel и технология ADO. Но каждый раз при написании обработок загрузки мне очень не хотелось в очередной раз использовать конструкции типа «Книга = Эксель.Workbooks.Open(…)», «ConnectionString=»Provider=Microsoft…» и пр. Хотелось работать в виде последовательности «Открыл файл» — «Выбрал лист» — «Загрузил в таблицу 1С» — «Работаю с внутренней таблицей встроенными методами 1С как с исходным документом».

Также хотелось иметь инструмент для максимально подробного просмотра файлов Excel в 1С с полным оформлением (цвета заливки, текста, рамки, объединения и пр.).

Была разработана ВК для «1С:Предприятие 8», которая по сути работает по вышеуказанному принципу. Методы ВК:

ОткрытьТабличныйФайл(ИмяФайла) — открывает файл электронной таблицы Excel.

ПолучитьСписокЛистов() — возвращает в случае удачного завершения список значений с именами рабочих листов таблицы.

ЗагрузитьЛист(ТабличныйДокумент,ИмяЛиста) — загружает лист с именем «ИмяЛиста» в табличный документ полностью. Загружаются значения типа Число, Дата, Булево, Строка, а также сохраняется все оформление (рамки, шрифт, цвета заливки и текста, объединения, ширина столбцов и высота строк).

ЗагрузитьОбластьЛиста(ТабличныйДокумент,ИмяЛиста,[Строка1],
[Столбец1],[Строка2],[Столбец2]) — загружает прямоугольную область листа в соответствующую область табличного документа. Сохраняется все оформление области.

Ограничения:

  1. Читаются только файлы формата OpenXML (xlsx, xlsm).
  2. Файл не должен быть защищен паролем.
  3. Не читаются картинки, сводные таблицы, диаграммы. Только рабочие листы с данными.

Скачиваемый архив содержит:

внешнюю компоненту PTLoad.DLL, документацию по методам и свойствам, обработки для 8.1 и 8.2, демонстрирующие просмотр всех листов файла Excel.

16 Comments

  1. Abadonna

    (0) Вопрос простой, как грабли: Excel в системе должен быть установлен?

    Reply ↓
  2. Anselm

    (1) Нет, Эксель не нужен. Файл напрямую читается.

    Reply ↓
  3. CagoBHuK

    Чем плох XSLT 2.0?

    Reply ↓
  4. Angeros

    в 8.2 есть возможности чтения xlsx напрямую без посредников в виде компоненты… Вообще использования всяческих компонент это зло, часто без них никак не обойтись, но точно не в этом случае…

    Reply ↓
  5. Anselm

    (5) подключение ВК ничем не хуже вызова Экселя или ADO. А OpenXML вообще можно разобрать везде, не только в 8.2

    Reply ↓
  6. Angeros

    (6)Я с вами не соглашусь. ms поддерживает windows. 1с поддерживает свою программу. А что будет с вашей компонентой когда выйдет новый Windows или 1с ?! где гарантия что автор компоненты и далее будет поддерживать свой продукт.?

    Вот у меня есть пример когда компонента чудесно работала на 77. а на 8.1 она уже не смогла работать в силу технических особенностей. Я написал автору компоненты он развел руками.

    технические средства 1с не деградируют а в основном развиваются, тоже самое можно сказать и про встроенные возможности windows всегда на мой взгляд предпочтительней использовать стандартные средства обходясь без непонятных компонент. ADO Есть на всех современных windows, если это важно бизнесу Excel можно купить.

    Reply ↓
  7. sergik_nsk

    согласен, ладно бы еще все было понятно и прозрачно, типа прочитал исходный код и спокоен, несмотря на это лень взяла верх и я скачал сей труд, читаю описалово — разработка перед регистрацией код активации хочет на сайте разработчика, даже регистрировать не стал, dll удалил, это типа скинь смс получишь много вкусного. Напишу сам — спокойней будет.

    Reply ↓
  8. Anselm

    (8) прошу прощения за неточность в описании. Оно из версии для загрузки xls и ods взято, где действительно нужно код вводить. DLL в данной публикации код не требует.

    Reply ↓
  9. AlexO

    (7) Angeros,

    технические средства 1с не деградируют

    там просто некуда деградировать — настолько они примитивны.

    (6) Anselm,

    А OpenXML вообще можно разобрать везде

    согласен. И, как будет сказано ниже, уже есть прекрасные наработки. Однако, вот это

    (5) Angeros,

    в 8.2 есть возможности чтения xlsx напрямую без посредников

    минимум скрытие правды — ПРЯМЫХ ВОЗМОЖНОСТЕЙ В 1С НЕТ! (это также и к вопросу, как 1С «развивается»).

    Есть совпадение структур формата файлов внешнего приложения и функционала в 1С, а именно: с 2007 MS Office появились форматы файлов XLSX и DOCX соответственно.

    Которые представляют собой всего лишь упакованные XML-файлы определенной структуры. А XML всегда был и остается доступным для редактирования в любом текстовом редакторе.

    Отсюда — раз 1С умеет (кое-как с большими проблемами скорости чтения) работать с тектсовыми файлами, она априори сможет работать с новым форматом файлов MS Office. И рано или поздно должны были появиться хотя бы любительские разработки в этом направлении, что и произошло.

    Есть уже встраиваемая обработка Душелова Чтение/Запись документа Excel 2007 без офиса, без ВК. (с примером для 7.7, 8.1 и 8.2 на управляемых формах), которая все это делает.

    Reply ↓
  10. AlexO

    (9) Anselm,

    так вопрос — покой ляд разрабатывать внешнюю DLL ТОЛЬКО ДЛЯ ЧТЕНИЯ ФАЙЛОВ Office-2007??

    Reply ↓
  11. Angeros

    (10) AlexO, В целом согласен так и есть.

    Reply ↓
  12. vers139

    Подскажите, пожалуйста, как загрузит Ваша обработка код товара из Excel, если в ячейке значение 1, формат ячейки 0000 (пользователь видит 0001)?

    Reply ↓
  13. Anselm

    (13) если в ячейке число (именно число, не преобразованное в строку), то независимо от формата в результирующий табличный документ будет загружено значение. То есть в Вашем примере будет загружено 1, и в ячейке будет стоять признак «СодержитЗначение». Если нужно загрузить число как строку, то в Excel нужно предварительно задать формат ячейки «Текстовый» и только потом вводить туда данные.

    Reply ↓
  14. Cemen82

    ОткрытьТабличныйФайл(ИмяФайла) — открывает файл электронной таблицы Excel.

    ПолучитьСписокЛистов() — возвращает в случае удачного завершения список значений с именами рабочих листов таблицы.

    ЗагрузитьЛист(ТабличныйДокумент,ИмяЛиста) — загружает лист с именем «ИмяЛиста» в табличный документ полностью. Загружаются значения типа Число, Дата, Булево, Строка, а также сохраняется все оформление (рамки, шрифт, цвета заливки и текста, объединения, ширина столбцов и высота строк).

    ЗагрузитьОбластьЛиста(ТабличныйДокумент,ИмяЛиста,[Строка1],

    [Столбец1],[Строка2],[Столбец2]) — загружает прямоугольную область листа в соответствующую область табличного документа. Сохраняется все оформление области.

    Reply ↓
  15. Vitaly18

    СписокЛистов = ВнешняяКомпонента.ПолучитьСписокЛистов(); — не возвращает список значений с именами рабочих листов таблицы — ……….закрывает 1с .

    Reply ↓
  16. Vitaly18

    PTLоаd : Недоступно в ДЕМО-версии. Полная версия доступна по адресу http://www.perftab.com. <- большие файлы Excel не читает..

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *