所以我使用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"不存在然后继续正常....
很抱歉,如果这有点复杂和/或长篇大论。
提前致谢。
答案 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;
}