我正在编写一个小型库,它将在C#中的Word 2003.DOT文档上执行MailMerge。我可以像这样检索和替换所有文档正文字段:
foreach (Field mergeField in document.Fields)
{
if (mergeField.Type == WdFieldType.wdFieldMergeField)
{
string fieldText = mergeField.Code.Text;
string fieldName = Extensions.GetFieldName(fieldText);
if (values.ContainsKey(fieldName))
{
mergeField.Select();
application.Selection.TypeText(values[fieldName]);
}
}
}
但是这不会从文档中检索页眉或页脚字段..
我试过这个:
subscriptionDocument.Sections[1].Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Fields.Count;
查询标题字段,但是返回的计数为“0”,即使字段实际存在。
我是否有办法在页眉和页脚字段上实现所需的效果?
答案 0 :(得分:1)
您的代码是正确的,通常您可以使用它来计算标题中的字段。 我猜您正在使用的测试文档的布局略有不同,例如偶数标题或第一页标题。使用“wdHeaderFooterPrimary”,如果在该部分中激活了“不同的第一页”,则不能访问第一页。 在Word中打开测试文档,启动VBA编辑器(Alt + F11),转到立即Windows并键入
?activedocument.Sections(1).Headers(wdHeaderFooterFirstPage).Range.Fields.Count
访问第一页标题中的字段。
答案 1 :(得分:0)
您需要与主文档分开显式搜索页眉和页脚。这对我有用...
putField("First_Name", "Fred");
putField("Last_Name", "Bloggs");
private void putField(string search, string replace) {
foreach (Section section in doc.Sections) {
doReplace(section.Range.Find, search, replace);
foreach (HeaderFooter h in section.Headers) {
doReplace(h.Range.Find, search, replace);
}
foreach (HeaderFooter f in section.Footers) {
doReplace(f.Range.Find, search, replace);
}
}
}
private void doReplace(Find fnd, string search, string replace){
fnd.ClearFormatting();
fnd.Replacement.ClearFormatting();
fnd.Forward = true;
fnd.Wrap = WdFindWrap.wdFindContinue;
fnd.Text = "«" + search + "»";
fnd.Replacement.Text = replace;
fnd.Execute(Replace: WdReplace.wdReplaceAll);
}