1

Тема: Вставить в Word данные из другого файла

Добрый день! Реально ли сделать такую задачу? Есть файл Word. В него надо вставить данные из другого файла, например, txt, такого же doc файла.
Пример:
Есть файл с данными:
дата -
название -
шифр -
и т.д.

И надо, чтобы я мог открыть документ ворд, запустить, например, макрос и все данные из того файла перенеслись в нужные мне поля этого документа. Причем именно поля. Реально?

2

Re: Вставить в Word данные из другого файла

Route пишет:

Добрый день! Реально ли сделать такую задачу? Есть файл Word. В него надо вставить данные из другого файла, например, txt, такого же doc файла.
Пример:
Есть файл с данными:
дата -
название -
шифр -
и т.д.

И надо, чтобы я мог открыть документ ворд, запустить, например, макрос и все данные из того файла перенеслись в нужные мне поля этого документа. Причем именно поля. Реально?

Написать сам макрос не трудно, труднее формализовать для каждого случая переноски данных правило поиска нужных данных в текстовом файле и правила поиска поля в документе Word для внесения в него целевого значения.
Для исходного файла это может быть номер абзаца, содержащего нужные данные, либо, напр., регулярное выражение, по которому переносимый контент может быть найден.
Для целевого файла это может быть имя закладки, содержащего целевое поле. Желательно для упрощения все такие поля сделать единообразными (напр., поле DOCPROPERTY с названием нужного пользовательского свойства.
Напрашивается решение: сделать файл параметров, описывающий исходные и целевые места. Это может быть ini-файл напр., такого содержания:

[Updates]
1=|описательтекста|имясвойства|
2=|описательтекста|имясвойства|
. . .
N=|описательтекста|имясвойства|

где:
описательтекста - регулярное выражение, отыскивающее текст в исходном текстовом файле
имя свойства - имя пользовательского свойства в документе, значение которого надо обновить (тогда все поля DOCPROPERTY, сформированные в документе заранее, по обновлении полей будут отображать нужные значения).

3

Re: Вставить в Word данные из другого файла

Примерчик бы живой такой с пару параметров хотя бы  roll  smile

4

Re: Вставить в Word данные из другого файла

Route пишет:

Примерчик бы живой такой с пару параметров хотя бы  roll  smile

Вот с примерчиками как раз и главный вопрос. Прежде, чем писать макрос, решите для себя, реализуема ли ваша задача.
Если исходные файлы вы составляете сами, тогда вопросов нет: вы сможете все заменяемые контексты определить как теги (напр., <свойство:значение>), либо представить их в том же ini-формате, а можете и разместить в другом файле Word в нужных полях или закладках. Тогда вопрос "на что заменять" будет решаться просто - вы поочередно отыскиваете все такие контексты в файле замен, определяя имена свойств и заменяющие значения.
Если же исходные файлы вам откуда-то передают в виде плоского текста, то формализация такого текста остается под вопросом. Вот типичные трудности:
- если в файле замен по факту две даты, то какая из них должна пойти в целевой документ?
- как отличить в файле замен название организации от фамилии сотрудника?
- как исключить ложные срабатывания по такому-то правилу?
- что должен делать макрос, если ожидаемый контекст не обнаружен в файле замен?
Если у вас есть четкий алгоритм нахождения каждой замены в файле замен, то можно браться за работу.
Примеров на VBA по анализу текста на соответствие регулярному выражению много в Интернете, изучите их. Помимо проверки того, соответствует ли строка регулярному выражению, ваш макрос должен уметь вытаскивать из найденной строки целевое значение (подконтекст или submatch). Например, если в исходном тексте имеется контекст вида:

... начало работ по реализации проекта намечено на 12.06.2019 с продолжением ...

то для выделения из него даты можно использовать регулярное выражение типа:

(проект)(.{1,20})(\s)(\d{1,2}\.\d{2}\.\d{2,4})

если поиск успешен, то четвертый submatch и будет содержать дату. Поскольку для выражения одного типа это может быть 1-й submatch, а для другого типа - 4-й, то номер этого  подконтекста также должен входить в параметр поиска, то есть их может стать три:

[Updates]
1=|описательтекста|номерподконтекста|имясвойства|

Сам же состав алгоритма по замене всех контекстов мне видится неизменным:
1. Макрос сканирует файл параметров и для каждого параметра определяет название свойства. Далее макрос находит в файле замен нужный контекст и, если он найден, то вытаскивает из контекста нужный submatch, а затем в целевом файле обновляет соответствующее пользовательское свойство найденным значением подконтекста.
2. По окончании сканирования параметров сам макрос обновляет все поля в целевом документе. Соответственно, все поля вида {DOCPROPERTY "свойствоN"} станут отображать заимствованные из файла замен значения. Эти поля в целевом файле пользователь расставляет самостоятельно.