Работа с файлами формата MS WORD (docx)

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Работа с файлами формата MS WORD (docx)

Сообщение Kitayets » 31.10.2025 01:48:40

Нахожусь под приятным впечатлением от FPSpreadsheet. Использовал в проекте, все очень круто!

Подскажите, а есть что-то похожее, но для формата MS WORD? Чтобы кроссплатформа и напрямую с файлами? Есть проект актуальный, надо с старого delphi перетащить, там сложная система отчетов на базе документов WORD, в которые пишутся результаты, все сделано через COM и автоматизацию самого офиса.

Если нет паскалевского, то что-то с СИ интерфейсом, какую-нибудь библиотечку с минимальными зависимостями?

Сам искал не нашел :( Спросил всяких ИИ моделей, но они предлагают автоматизацию, и если для кроссплатформы то через libreoffice, либо фантазируют какие-то несуществующие библиотеки причем дают ссылки на гитхаб, но там этого нет...

про zip + xml это конечно слишком низкий уровень абстракции...
Kitayets
постоялец
 
Сообщения: 174
Зарегистрирован: 05.05.2010 21:15:24

Re: Работа с файлами формата MS WORD (docx)

Сообщение Sharfik » 31.10.2025 03:32:59

Kitayets писал(а):про zip + xml это конечно слишком низкий уровень абстракции...

А сторонняя библиотека как будто как то иначе работает))

Пакет lz_FpVectorial
Создает с нуля docx, odt и позволяет формировать как таблицы, так и текст внутри. В Typhon лежат примеры, в Lazarus не знаю. На гитхабе наверно есть

TAsterDocFile
Только вывод таблиц в Excel и Word шаблоны. Мне больше не нужно было.
viewtopic.php?f=10&t=43494
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 827
Зарегистрирован: 20.07.2013 01:04:30

Re: Работа с файлами формата MS WORD (docx)

Сообщение slyubez » 31.10.2025 10:41:44

про zip + xml это конечно слишком низкий уровень абстракции...

Зато это реальная кроссплатформа. Теперь делаю только так, особенно на Лазаре.

Добавлено спустя 2 часа 13 минут 17 секунд:
Причем xml стараюсь формировать тоже руками без XML-компонентов, благо что в Лазаре это все элементарно делается. Но конечно, это не для очень сложных документов подходит.
Но считаю, что должен рассказать об одной проблеме. На разных компах организации стоят MS Office и LibreOffice. У меня была задача корректировать оооочень кривой XLSX, формируемый FastReportом, в корректный для возможности мелких правок. Причем на тех ПК, на которых это должно конвертироваться, установлена только Либра (у нас везде Винды). Начал я писать программу на Delphi. Так как там Либры, OLE решил не использовать - ограничился для чтения штатным XML-компонентом. У меня был каталог с готовым документом-шаблоном, в котором я просто корректировал отдельный файл (формировал StringList и сохранял) и потом зиповал. По итогу было так, что файл-результат в MS Office открывался чисто, а в Либре ни в какую не хотел, причем не помогало восстановление документа штатными средствами Либры. Много способов перепробовал. Помогло только переписывание программы в Лазарусе. Там я решил даже не использовать TStringList, а формировал строковую переменную и записывал файл, используя старинные команды Паскаля Reset, Write и CloseFile. Потом зипование, по-моему, через TZipper. Всё, проблема снята.
slyubez
постоялец
 
Сообщения: 185
Зарегистрирован: 31.03.2015 08:44:07

Re: Работа с файлами формата MS WORD (docx)

Сообщение Sharfik » 31.10.2025 21:10:17

Про баги, для общественности:
1. Записанный XLSX не означает что при открытии Excel пересчитает все формулы в соседних листах. Либо руками надо давать команду, что пользователь не будет делать. Либо прописывать внутри ключ автопересчета при открытии.
2. Файл XLSX я писал чисто, но как и у slyubez были проблемы. При открытии в Excel файл открывается, но просит сделать восстановление. Лечить пока не пытаюсь. Работает и не трогаю. Пересохранить не проблема.
3. И одна не связанная с программированием мною. Делал документ в Word оформленный по всем правилам, чтобы нигде ничего не разъезжалось. Хотел показать что при правильном использовании инструментов Word документ отображается идеально в любом ПО. Он правда отображался нормально в Word и в Libre. Но третьим полигоном испытания у меня был Яндекс и Мейл.ру с их встроенными онлайн редакторами документов. И вот под конец вылизывания документа все закончилось тем что Яндекс.Документы перестал его открывать вообще. :(
4. В проектировании строительном, ну и в конструкторском деле, есть правило оформлять документы с рамками и штампами. Если у человека Word Документ это таблица большая, то ее строки начинаются на одном листе и заканчиваются на другом. И так далее. Формат docx появился где то в 2010 и потом развивался, обновлялся. И Word если видит старую версию документа, а сам он новее, то предлагает сохранить с обновлением структуры. И вот подстава жизни когда ведомость с рамками пересохраняется и на таблица начинает на каждой странице стартовать не с верху, а с середины листа. И как выяснилось, виною была таблица вставленная в колонтитул. Она начиналась посередине, и там же body решил стартовать. Сделал невидимую графу у таблицы в колонтитуле, на всю высоту и все стало нормально.

**Не все баги наши, нет предела совершенству.

...вот где бы pdf читалку надыбать. Все что находил работало медленно.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 827
Зарегистрирован: 20.07.2013 01:04:30

Re: Работа с файлами формата MS WORD (docx)

Сообщение Kitayets » 01.11.2025 01:35:32

Sharfik писал(а): Kitayets писал(а):
про zip + xml это конечно слишком низкий уровень абстракции...


А сторонняя библиотека как будто как то иначе работает))


Ну понятно, что на низком уровне так и работает, но хотелось бы взаимодействовать с документами на уровне абстракций - документа, страницы, абзаца, таблицы, стилей, как в FPSpreadsheet, а не на уровне значений тегов xml документа. FpVectorial посмотрю, спасибо.
Kitayets
постоялец
 
Сообщения: 174
Зарегистрирован: 05.05.2010 21:15:24


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1