Динамическое создание документов Office Open XML: обновлять все поля при открытом - PullRequest
3 голосов
/ 09 февраля 2009

Я программно создаю документ Office Open XML (формат Word 2007) и хотел бы обновить все поля при первом открытии документа, сгенерированного мной, в Word.

Когда я исследовал это некоторое время назад, единственный способ сделать это - запустить VB Script при открытии документа. Но VB Script не запускается по умолчанию, и для того, чтобы это работало, пользователь должен авторизовать сценарии, что сложнее, чем просить пользователя выполнить «select-all, F9», и поэтому это противоречит цели.

Есть предложения?

Alex

Ответы [ 2 ]

8 голосов
/ 26 августа 2010

Есть способ сделать это без VB Script.

Вы можете установить поле как грязное, и оно будет обновляться при открытии документа.

<w:fldSimple w:instr="TOC" w:dirty="true" />

Если у вас много полей, вы можете обновить настройки в документе, чтобы все поля обновлялись при открытии документа

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<w:settings xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
    <w:updateFields w:val="true" />
</w:settings>

Тем не менее, оба они имеют обратную сторону диалогового окна подтверждения, которое появляется при открытии документа: «Этот документ содержит поля, которые могут относиться к другим файлам. Хотите обновить поля в этом документе?»

2 голосов
/ 17 февраля 2009

Ваше исследование уже показало правильные результаты. Использование VBA или любой другой формы автоматизации Word - единственный путь. Word и OpenXML имеют возможность автоматического обновления полей при открытии.

...