C# word interop/向页脚添加新字段将删除现有字段
我一直在使用interop编辑现有的word文档。我的问题是;我需要在文档页脚中添加一个新字段,让我惊讶的是,它删除了现有的页脚字段,所以只剩下新添加的字段。没有关于它的明确文档,结果是出乎意料的。下面是我的代码:C# word interop/向页脚添加新字段将删除现有字段,c#,ms-word,interop,C#,Ms Word,Interop,我一直在使用interop编辑现有的word文档。我的问题是;我需要在文档页脚中添加一个新字段,让我惊讶的是,它删除了现有的页脚字段,所以只剩下新添加的字段。没有关于它的明确文档,结果是出乎意料的。下面是我的代码: foreach (Microsoft.Office.Interop.Word.Section wordSection in wordDocument.Sections) { Microsoft.Office.Interop.Word.Heade
foreach (Microsoft.Office.Interop.Word.Section wordSection in wordDocument.Sections)
{
Microsoft.Office.Interop.Word.HeadersFooters footers = wordSection.Footers;
foreach (HeaderFooter footer in footers)
{
footer.Range.Select();
Field f = appWord.ActiveWindow.Selection.Fields.Add(appWord.ActiveWindow.Selection.Range);
appWord.Selection.TypeText(footerText);
}
}
您所描述的是预期行为,因为.Add不是.Append或.InsertAfter,您可能有理由希望该字段将被固定到选择的末尾。如果在Word中选择一段文本并发出VBA命令
Selection.Fields.Add Selection.Range
你会看到几乎相同的事情
您需要做的是确定需要插入字段的精确范围,并将其添加到其中。理想情况下,完全避免使用选择。因此,如果您需要字段位于页脚的开头,可以从下面的VBA示例开始,并将其转换为C抱歉,我现在没有足够的精力
Sub insertFieldAtStartOfSec1Footers()
Dim footer As HeaderFooter
Dim rng As Word.Range
For Each footer In ActiveDocument.Sections(1).Footers
Set rng = footer.Range
rng.Collapse wdCollapseStart
' Insert a simple SECTION field
rng.Fields.Add rng, WdFieldType.wdFieldEmpty, "SECTION", False
Set rng = Nothing
Next
End Sub
您所描述的是预期行为,因为.Add不是.Append或.InsertAfter,您可能有理由希望该字段将被固定到选择的末尾。如果在Word中选择一段文本并发出VBA命令
Selection.Fields.Add Selection.Range
你会看到几乎相同的事情
您需要做的是确定需要插入字段的精确范围,并将其添加到其中。理想情况下,完全避免使用选择。因此,如果您需要字段位于页脚的开头,可以从下面的VBA示例开始,并将其转换为C抱歉,我现在没有足够的精力
Sub insertFieldAtStartOfSec1Footers()
Dim footer As HeaderFooter
Dim rng As Word.Range
For Each footer In ActiveDocument.Sections(1).Footers
Set rng = footer.Range
rng.Collapse wdCollapseStart
' Insert a simple SECTION field
rng.Fields.Add rng, WdFieldType.wdFieldEmpty, "SECTION", False
Set rng = Nothing
Next
End Sub
甚至不需要字段部分。footer.Range.Text=footer.Range.Text+新文本;或footer.Range.insertafternewtext;写我自己的答案就足够了,但是你的答案基本上是一样的,所以+1:.@varocabas-如果要插入字段,而不仅仅是一段文本,则字段部分是两个主要选项之一。但不确定OP问题中的.typetext行是OP真正想要做的,还是只是某种人工制品,例如测试代码:-是的,我知道他的意图是添加一个字段;虽然,从他的代码来看,一个简单的文本添加实际上已经足够了,但代码就是这样做的:创建字段,然后忽略它,只添加文本;虽然不尊重现有的。这就是为什么我的建议更关注真实意图而不是实际的代码/请求。。。“我从来都不喜欢田野。”比巴迪亚我意识到了这一点。但是当我尝试你的代码时,我得到了错误!我的word文件中未定义书签。我使用:对象方向=WdCollapseDirection.wdCollapseStart;r、 胶原介导;字段f=r.Fields.Addr,WdFieldType.wdFieldEmpty,footerText@varocarbas我想要的是有两个独立的字段,一个对齐中心,另一个对齐左边。我尝试了字段和键入文本,但没有区别。字段部分甚至不是必需的。footer.Range.Text=footer.Range.Text+新文本;或footer.Range.insertafternewtext;写我自己的答案就足够了,但是你的答案基本上是一样的,所以+1:.@varocabas-如果要插入字段,而不仅仅是一段文本,则字段部分是两个主要选项之一。但不确定OP问题中的.typetext行是OP真正想要做的,还是只是某种人工制品,例如测试代码:-是的,我知道他的意图是添加一个字段;虽然,从他的代码来看,一个简单的文本添加实际上已经足够了,但代码就是这样做的:创建字段,然后忽略它,只添加文本;虽然不尊重现有的。这就是为什么我的建议更关注真实意图而不是实际的代码/请求。。。“我从来都不喜欢田野。”比巴迪亚我意识到了这一点。但是当我尝试你的代码时,我得到了错误!我的word文件中未定义书签。我使用:对象方向=WdCollapseDirection.wdCollapseStart;r、 胶原介导;字段f=r.Fields.Addr,WdFieldType.wdFieldEmpty,footerText@varocarbas我想要的是有两个独立的字段,一个对齐中心,另一个对齐左边。我尝试了Field和TypeText,但没有区别。好的,我想如果你能提供一个现有页脚包含的内容的示例,以及你希望它看起来是什么样的,那会有所帮助。例如,假设现有页脚的左侧包含文本myexistingfooter。你的页脚应该是什么?好的,我想如果你能提供一个现有页脚的样本,以及你想要它看起来是什么样子,那会很有帮助。例如,假设现有页脚的左侧包含文本myexistingfooter。你的页脚应该是什么?