Обработка файлов 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 не будет опубликован. Обязательные поля помечены *