Тестировался с документами Microsoft office стандарта Open XML(2010).
Кто не знает, при сохранении документа в MS Office есть маленькая галочка "Привести файл к новой версии документа", если ее поставить то все весело будет. И если очень повезет, то все форматирование летит к чертям.
Далее, реализована поддержка заполнения шаблонов форматов XMLX, DOCX. В классе есть процедура:
- Код: Выделить всё
procedure TAsterDocFile.TablesWriteToFile;
В ней примерно такая выборка. Соответственно последние три не были реализованы.
- Код: Выделить всё
if (FDocFileType=dftDocx) then
begin
end
else if (FDocFileType=dftXlsx) then
begin
end
else if (FDocFileType=dftMSDoc2003XML) then
begin
//todo: MS XML
end
else if (FDocFileType=dftOdt) then
begin
//todo: Open Office
end
else if (FDocFileType=dftOds) then
begin
//todo: Open Office
end;
Принцип работы следующий: берется документ, распаковывается как zip архив во временную папку. Тестировалось все под Win10, по этому в теле модуля u_aster используется функция запроса временной папки Windows. Под линукс надо дописать. Далее, распакованное содержимое по известным файлам считывается в XML и заполняется. Класс ищет строго определенный по названию лист книги или определенную по заголовку таблицу документа.
После формирования новых XML все упаковывается заново в файл и передается пользователю. Для форматирования текста документов DOCX предусмотрены теги (курсив, жирный, зачеркивание, подчеркивание).
**У меня не было времени и возможности изучать xsd, поэтому как и что заполнять, где что лежит изучалось распаковкой и припарированием чистых файлов в варианте 2010. И сборка документа ведется без использования схем xml.
Если кто будет развивать, то не забывайте выкладывать сюда.
Скачать:
2021-03-19 https://disk.yandex.ru/d/Q-mmLC0GnwRq5Q