Обработка файлов OpenOffice Calc без установленного OpenOffice и ВК

Прямое чтение файлов OpenOffice Calc в ТЗ без использования ВК и самого OpenOffice! Высокая скорость чтения данных!

Некоторые клиенты присылают свои заказы в формате OpenOffice, а т.к. мы используем MS Office, мне приходилось конвертировать файл в установленном на моём компе OpenOffice.

А не так давно переписывал обработку заказов от клиентов и использовал обработку прямого чтения файлов Excel 2007 производства достопочтенного Dushelov, покурив файл OpenOffice решил попробовать переделать обработку под формат OpenOffice. Вот предлагаю общественности результат трудов.

Принцип работы:

Так как формат близок к формату Excel 2007, что значит обычные XML’ки в ZIP-архиве, то извлекаем во временную папку этот файл, берём нужный файл и обрабатываем как обычный XML-файл. Никаких COM-объектов, никаких внешних модулей, всё обрабатывается встроенными средствами 1С 8.1. Работает и под сервером 1С! Не требуется установленный OpenOffice!

Разрешение споров и конфликтов:

Если кто-то уже такое сделал (а я не нашёл), то уступаю ему лавры и поставлю вашу ссылку.

Обработка не претендует на: уникальность, чёткость кода, отсутствие методов «индийского программирования» и пр. Критику я выслушаю и учту. Если попадутся файлы, которые обработка не может обработать, выкладывайте в комментариях.

Обработка Excel 2007 тов. Dushelov: //infostart.ru/public/19139/

Заранее спасибо!

UPDATE 1:

Переделал код вытаскивания текста из ячейки исправив тем самым баг с обрезанием строк, которые OpenOffice разбил на несколько. Ну и в целом алгоритм вытаскивания текста ячейки стал лучше. Также я добавил кучу комментариев.

 

24 Comments

  1. СергейКа

    Саму обработку конечно же можно улучшить, но за перенос принципа с обработки Душелова и указание исходника плюс.

    Reply
  2. markers

    (1) Буду благодарен на указание проблемных мест и методов их решения.Это вообще мой первый опыт работы с XML, так что мог сделать не особо оптимально 🙂 🙁

    Reply
  3. markers

    Так-же кому интересно, через некоторое время могу представить «комплексное» решение, чтение в зависимости от расширения файла:

    xls = Немного переделанной обработкой Excel через ADO, не помню уже чей 🙁

    xlsx = Прямое чтение Excel 2007 by Dushelov

    ods = Прямое чтение OpenOffice

    + Хоть и не идеальное но решение поиска в какой колонке что брать для успешной обработки разнообразных вариантов заказов клиента (Неважно расположение колонок, необязательное наличие колонки Код (Но желательно), и многое прочее), которое я написал для работы т.к. нам присылают всевозможные варианты заказов (переделанные клиентами и многое другое). Скорей-всего необходимо будет её немного допилить под свои реалии. У нас обрабатывает она 99% заказов, и правильно обработанных заказов 99.9%. Но код не идеален.

    Если интересно, могу выложить!

    Reply
  4. artbear

    Плюсанул.

    НО ИМХО название неудачное 🙁

    Назови как-нибудь типа «Обработка файлов OpenOffice Calc без установленного OpenOffice»

    Reply
  5. markers

    (4) Спасибо! Переделал!

    Reply
  6. Душелов

    Нормально, даешь больше универсальных функция чтения данных 🙂

    Reply
  7. Mogidin
    Так как формат близок к формату Excel 2007 что значит обычные XML`ки в ZIP архиве

    http://ru.wikipedia.org/wiki/OpenDocument

    http://ru.wikipedia.org/wiki/Office_Open_XML

    Скорее наоборот))) Формат MS близок к OOo.

    Reply
  8. markers

    (7) Согласен, но т.к. речь о нём шла от обработки Excel 2007, то написал так 🙂

    Reply
  9. maxpiter

    (6) Даешь универсальную ВК для чтения данных MSExcel, OO Calc, а также SuperCalc 😉

    Reply
  10. markers

    (9) ВК не самый лучший вариант, лучше максимально встроенными средствами 1С + максимум COM объекты, чтоб не обламывался народ желающий заюзать под сервером 1С (8.х)….. а про SuperCalc я вообще не вкурсе 🙂 Если хранит данные в XML можете переделать обработку и под него 🙂

    Reply
  11. maxpiter

    (10) SuperCalc это типа шутка 🙂

    я к тому, что универсальную для всех и вся.

    Reply
  12. markers

    (11) 😀

    Reply
  13. 421187162

    Спасибо тебе.

    Reply
  14. markers

    (13) Да не за что! Пользуйтесь на здоровье!

    Reply
  15. CheBurator

    Ado выкинул после первой же пробы. на файле, который эксель показывает нормально — ado возвращал 4900 строк из 10 тыс…

    Reply
  16. markers

    (15) Странно, у меня, на теперь уже на старой работе, были прайсы как раз порядка 10 тысяч строк, выбирало всё и даже больше.

    Reply
  17. CheBurator

    (16) а я и не говорю, что у вас — плохо обрабатывает. у вас — хорошо, а у меня — плохо… Причем у меня на куче файлов — нормально, а на одном — плохо. Где гарантия того, что на остальных не будет плохо..? хз..

    Reply
  18. ndacoder

    поставил минус из-за того что автор не совсем честно разбирает файл, и результат не всегда соответствует ожидаемому,

    в описание нужно добавить что случай многострочного объединения ячейки не учитывается.

    Reply
  19. bulpi

    С объединением ячеек совсем плохо…

    Reply
  20. bulpi

    А между тем, минимальные изменения в тексте функции ОбработатьФайлOpenOffice помогают справиться с этой проблемой!

    Было (стр.48):

    ИначеЕсли хмл.Имя = «table:table-cell» Тогда //Выпал тэг ячейки

    Стало :

    ИначеЕсли хмл.Имя = «table:table-cell» ИЛИ хмл.Имя =»table:covered-table-cell» Тогда //Выпал тэг ячейки

    а также после стр. 60 :

    Если Не ПустаяСтрока(СокрЛП(НенужнаяЯчейка)) Тогда

    добавить строки :

    Колонка = Колонка + Число(НенужнаяЯчейка)-1;

    Для к = ТЗ.Колонки.Количество() По Колонка-1 Цикл ТЗ.Колонки.Добавить(«F» + (ТЗ.Колонки.Количество()+1)); КонецЦикла;

    Reply
  21. lcdlynx

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

    Например:

    1 2 3

    4 [пустая]6

    Получаем:

    1 2 3

    4 6

    Как это исправить?

    Reply
  22. asg1975

    В хозяйстве сгодится. Далеко не у всех стоит MS Office, да и Open Office тоже не всегда. А тут можно вывернуться

    Reply
  23. andrey314

    Плюс поставил. Дешево и сердито. Но есть один минус — читает только первый лист.

    Reply
  24. Japan

    1 2 3

    4 [пустая]6

    Получаем:

    1 2 3

    4 6

    Александр не подскажите как это исправить?

    Reply

Leave a Comment

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