在申请之前,请检查Word Doc的域代码

时间:2014-05-14 08:32:28

标签: vb.net vsto

所以我使用vb.net编写了一个VSTO插件,为Word中的文档添加了一个标题,但是从历史方法来看,我们有很多带字段代码的模板。我的插件不会考虑这些因素,只需将标题剥离以添加您从弹出窗口中选择的xxxxx值。

我需要我的代码足够聪明才能发现'字段代码和附加或如果它不存在,例如然后空白文档继续按预期运行。我可以使用以下代码附加此字段代码:

wordDocument.Variables(" fieldname")。Value =" xxxx" wordDocument.Fields.Update

然而,我的工具然后正常添加标题并从模板中删除大部分内容。因此,我的问题是如何在继续之前为此编写检查代码。所以用简单的英语我需要我的插件来自:

加载弹出窗口 在标头中设置xxxx值 关闭

对此:

加载弹出窗口 检查文档是否存在" fieldname" 如果" fieldname"然后存在 wordDocument.Variables(" fieldname")。Value =" xxxx" (来自弹出选择) wordDocument.Fields.Update 但是如果" fieldname"不存在然后继续正常....

很抱歉,如果这有点复杂和/或长篇大论。

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是我在C#中的代码,希望这可以帮助您在VB.Net中编写代码

foreach (Section sec in doc.Sections)
{
    doc.ActiveWindow.View.set_SeekView(WdSeekView.wdSeekCurrentPageHeader);
    foreach (HeaderFooter headerFooter in sec.GetHeadersFooters())
    {
        doc.ActiveWindow.View.set_SeekView(headerFooter.IsHeader ? WdSeekView.wdSeekCurrentPageHeader : WdSeekView.wdSeekCurrentPageFooter);
        if (headerFooter.Range.Fields.Count > 0)
        {
            //Append to existing fields
            UpdateFields(headerFooter.Range.Fields);
        }
        else
        {
            //Add field code
            AddFieldCode(headerFooter.Range);
        }

    }
    doc.ActiveWindow.View.set_SeekView(WdSeekView.wdSeekMainDocument);
}

迭代头类型的扩展方法

public static IEnumerable<HeaderFooter> GetHeadersFooters(this Section section)
{
    List<HeaderFooter> headerFooterlist = new List<HeaderFooter>
        {
            section.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary],
            section.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage],
            section.Headers[WdHeaderFooterIndex.wdHeaderFooterEvenPages],
            section.Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary],
            section.Footers[WdHeaderFooterIndex.wdHeaderFooterFirstPage],
            section.Footers[WdHeaderFooterIndex.wdHeaderFooterEvenPages]
        };

    return headerFooterlist;
}