Бесплатная native-компонента для прямого чтения XLS файлов для 1С8.2

Все просто — загрузка через OLE мне показалась долгой, существующие компоненты прямого чтения оказались платными, пришлось по-быстрому написать свою.
Для скачивания выложена обработка чтения и визуализации xls-файлов с зашитой в ее макет компонентой, реализованной по технологии native-api. Работа проверялась под толстым и тонким клиентом.

Методы:

  1. ОткрытьФайл(ИмяФайла) — Возвращает к-во листов, если 0, значит файл не открыт
  2. ТекущийЛист(НомерЛиста) — Устанавливает текущий лист открытой книги и возвращает к-во колонок
  3. ЗначениеЯчейки(НомерСтроки,НомерСтолбца) — Возвращает строковое значение ячейки текущего листа

Свойства:

  1. ИмяЛиста — Возвращает имя текущего листа
  2. КоличествоКолонок — Возвращает количество колонок текущего листа
  3. КоличествоСтрок — Возвращает количество строк текущего листа

Недостатки:

  1. Не читает xlsx-файлы
  2. Работает только под Windows

25 Comments

  1. andrewks

    чем не устроили adodb и Yoksel?

    Reply
  2. UncleVader

    (1) ADODB Для простых случаев — пушкой по воробъям, а Yoksel для 8-ки не докурил, как-то не понял с наскока что в нем к чему. Честно говоря, на всю затею я потратил меньше часа, так что в этом случае считаю цель оправдала средства.

    Reply
  3. Magister

    Озвучьте поддерживаемые форматы (версии Excel).

    Также интересует, есть ли 64-разрядная компонента?

    Reply
  4. andrewks

    (2)

    ADODB Для простых случаев — пушкой по воробъям

    хотелось бы услышать обоснование. тем более, что механизм поддерживает запросы.

    судя по времени, использовали какую-то готовую библиотеку, типа FPSpreadsheet для FPC?

    Reply
  5. andrewks

    вот если бы для Linux запилили, это был бы жирнющий плюс 🙂

    Reply
  6. DrAku1a

    Miracle Native на ИС поищите — она и не такое умеет… и бесплатная!

    Reply
  7. UncleVader

    (3) При создании ВК использовал библиотеку TXLSFile для Delphi, которая по заверению автора поддерживает формат MS Excel 97, 2000, XP, 2003. На Win64 пробовал — работает.

    (4) насчет сложности применения ADODB — из тех готовых обработок что тут нашлись (все не проверял) ни одна не смогла открыть мой файл не смотря на то что он небольшой по объему, но плохо структурированный. Кроме того, читал описание — есть некоторые ограничения, в частности есть проблемы при чтении где в колонках есть разноформатные данные, подробности тут.

    Хотя для чтения больших объемов данных (прайс-листы например) скорее всего буду применять эту технологию.

    (5) Никогда не разрабатывал под Linux (к сожалению), поэтому врядли дойдут руки до этого, хотя кто знает…

    (6) Пробовал отсюда, она триальная и больше 10 строк не захотела прочитать, именно после нее и решился на свое.

    Reply
  8. andrewks

    (7)

    Никогда не разрабатывал под Linux (к сожалению), поэтому врядли дойдут руки до этого, хотя кто знает…

    если, таки, дойдут руки, то вроде неплохой модуль: http://wiki.freepascal.org/FPSpreadsheet для лазарус

    Reply
  9. Magister

    (8) Как раз недавно его смотрел, собственно потому и про форматы вопрос задал.

    Попался мне тут недавно файл формата Excel 2.x…. она его как раз умеет читать 🙂

    Даже подумал написать ВК, а тут эта разработка. Только вот формат нужный, похоже, не умеет 🙁

    Reply
  10. UncleVader

    (8) спасибо, к лазарусу давно присматриваюсь, надеюсь наступит тот день

    (9) так что, удалось прочитать Excel 2.0?

    Reply
  11. Evil Beaver

    Чем читаете файл? Неужели собственноручно байтики ковыряете? Тогда где доки брали?

    Reply
  12. UncleVader

    (11) в (7) же писал:

    При создании ВК использовал библиотеку TXLSFile для Delphi, которая по заверению автора поддерживает формат MS Excel 97, 2000, XP, 2003. На Win64 пробовал — работает.

    (8) Нашел виртуалку с Линуксом и с установленным Лазарусом, даже скомпилил библиотеку .so, но подключить ее в контексте 1С сервера под 64x Убунтой не удалось и как диагностировать пока не представляю…

    Reply
  13. Evil Beaver

    (12) Каюсь, не заметил.

    Reply
  14. Yashazz

    Невозможность читать xlsx — это жирный недостаток по нонешним временам. ADO рулит!

    Reply
  15. UncleVader

    (14) добавить не проблема, просто мне не критично…

    Reply
  16. Magister

    (0) Погуглил чуток про TXLSFile… а он ведь платный. Бесплатная версия есть, но работает только при запущенной Delphi.

    Автор, вы его покупали? Если да — то интересно, в чем смысл компоненту распространять бесплатно.

    Ну а если нет… тут и так всё понятно.

    Reply
  17. UncleVader

    (16) Magister, Нет, не покупал, нашел в хламнике. Интересно, а почему вам интересно?

    Выложил бесплатно чтобы помочь тем кто ищет, потому как сам нуждался в такой.

    Ну а чтобы совсем совесть успокоить планирую переписать под Lazarus с применением вышеуказанной библиотеки.

    Reply
  18. Magister

    (17) Как раз с точки зрения совести интересно. Ну и можно ли использовать для себя. Получается, что нет.

    P.S. http://infostart.ru/public/170940/

    Reply
  19. UncleVader

    (18) Ну вот, теперь мне лень не одолеть, разве что реализовать поддержку xlsx, распарсив его как xml например как учат тут

    Reply
  20. andru_dv

    На своём примере убедился как полезна в работе схожая компонента для 7.7 А теперь ещё и для восьмерки появилась!

    Ещё польза в том что в организациях не всегда установлен Эксель на сервере. Через оле в таких случаях не прочитать xls файл и тут как раз выручают такие компоненты. Большое спасибо за труд. Плюсую!

    Reply
  21. fxfan

    Спасибо!

    Все сразу заработало и очень помогло — на сервере нет Экселя.

    Да и интерфейс проще, чем к Экселю.

    Reply
  22. lm-alex

    {ВнешняяОбработка.ПросмотрXLSПрямымДоступом.МодульОбъекта(14)}: Ошибка при вызове метода контекста (ПоместитьВоВременноеХранилище)

    АдресХранилищаНаСервере = ПоместитьВоВременноеХранилище(Таблица, Новый УникальныйИдентификатор);

    по причине:

    Переданное значение не может быть помещено во временное хранилище

    Reply
  23. UncleVader

    подозреваю что клиент-сервер, я видел ошибки в таком варианте, надо переделывать, да руки не доходят

    Reply
  24. 116hrus

    (23), у меня точно файловая версия, но выдает такую же ошибку как и в (22)

    Reply
  25. UncleVader

    Проверялось только в толстом клиенте, возможно причина в этом.

    Кстати я ушел сам от этого варианта, прайсы гружу из csv-файла.

    Намного быстрее чем OLE и универсально.

    Могу поделиться наработкой 🙂

    Reply

Leave a Comment

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