powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как написать генератор Word-файлов, с одинаковой структурой и разными данными
4 сообщений из 4, страница 1 из 1
Как написать генератор Word-файлов, с одинаковой структурой и разными данными
    #36670269
Vetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Стоит задача генерировать документацию (конечные файлы достаточно большие и сложные).
Будет много разных документов одинаковой структуры. Некоторые куски текста будут одинаковые во всех документах. Но вот данные, которыми заполняются таблицы в документах, а также некоторый текст внутри отдельных глав будет отличаться. Генерация может быть как в doc, так и в rtf формате.

Соответственно, вопрос: подскажите, пожалуйста, как лучше всего генерировать одинаковые по структуре, но разные по данным документы?


У меня есть кое-какие соображения. Первое, что приходит в голову — составить шаблон документа, в котором вместо динамических данных — макросы.
Генератор документов получает на вход xml-документ с данными, затем открывает doc-файл, идет по нему, находит макрос, и вместо него подставляет данные из xml-файла. Генератор использует COM-технологию для сканирования объектов.

Например:
Word-документ шаблона:


$Title$ documentation

Authors:
$foreach authors$
FIO: $author$
$end foreach$



xml, который передается:
автор<Title>Test</Title>
<authors>
<author>Petrov A I</author>
<author>Ivanov E E</author>
</authors>



В результате генерации мы должны получить:

Test documentation

Authors:
FIO: Petrov A I
FIO: Ivanov E E



В результате разных xml-ей мы и получим одинаковые по структуре, но разные по данным документы, как и нужно.

Что не нравится в этом подходе: нужно писать парсер на COM, который будет ходить по doc-шаблону, разбирать макросы, понимать, где циклы начинаются, где заканчиваются — сложно это... Что хорошо: есть визуальный шаблон, и пользователь сразу видит, как примерно будет выглядеть конечный документ.

Второй подход: использовать обычную xslt-трансформацию, где куски отформатированного текста забиты прям в xsl-шаблон. Огромный недостаток здесь — xsl очень ненаглядный, что недопустимо, так как есть требование, чтобы некоторые пользователи могли сами править шаблоны. Учить xsl-преобразованию для этого их недопустимо!

Может, есть более простое и гибкое решешие генерации одинаковых по структуре документов, чем первое решение, предложенное мной?ло
...
Рейтинг: 0 / 0
Как написать генератор Word-файлов, с одинаковой структурой и разными данными
    #36670427
Vetal,
если не нужно менять форматирование внутри "динамических" данных, то можно обойтись методом Execute вордовского объекта Find . Проще, но менее гибко.
Например:Шаблон Word-документа:
~1~ documentation

Authors:
FIO: ~2~
FIO: ~3~


"словарь", который передается:
1=Test
2=Petrov A I
3=Ivanov E E
Псевдо-код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Set wdApp = CreateObject("Word.Application") 
Set mDoc = wdApp.Documents.Add "c:\templates\myTemplate.doc"
For each mItem in mDictionary
    mDoc.Content.Find.Execute FindText:="~" & mItem.Key & "~", _
           ReplaceWith:=mItem.Value, _
           Replace:=wdReplaceAll
Next
mDoc.SaveAs "c:\docs\myDocNNN.doc"
Set mDoc = Nothing
dwApp.Quit
Set wdApp = Nothing
результат
Test documentation

Authors:
FIO: Petrov A I
FIO: Ivanov E E
...
Рейтинг: 0 / 0
Как написать генератор Word-файлов, с одинаковой структурой и разными данными
    #36670791
dn1k1t0ss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забавно.. Недавно отказался от такого решения задачи в пользу Exel =) У меня в программе (на Delphi) из базы данных генерировались отчетные формы (в том числе и таблицы), и выводилось все в Word. Реализовал, как и сказано было при помощи метода find. Создал шаблон, понаставил "статичных данных" - тегов вида <моя_переменная> и потом заменял их методом replace. Но на сравнительно больших данных (более 2000 записей, которых необходимо заменить) такая штука начинает работать довольно медленно. Поэтому я решил отказаться от такого метода, и попробовать генерировать в Exel таблицу с моими данными, а уже с помощью VBA создавать отчеты прямо в Exel, без метода find. Но тоже возникли сложности в реализации =) Поэтому, сейчас создам тему на форуме по созданию шаблонов в Exel =)
...
Рейтинг: 0 / 0
Как написать генератор Word-файлов, с одинаковой структурой и разными данными
    #36673010
Vetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробуй камнемVetal,
если не нужно менять форматирование внутри "динамических" данных, то можно обойтись методом Execute вордовского объекта Find . Проще, но менее гибко.

Хороший вариант, если бы у меня были только обычные пары значений, но у меня есть списки объектов. То-есть, в каждом элементе списка может быть целый набор полей.
То-бишь, следующий вариант:
<Title>Test</Title>
<authors>
<author><title>Doctor</title><name>Petrov A I</name></author>
<author><title>Professor</title><name>Ivanov E E</name></author>
</authors>
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как написать генератор Word-файлов, с одинаковой структурой и разными данными
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]