Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# word interop/向页脚添加新字段将删除现有字段_C#_Ms Word_Interop - Fatal编程技术网

C# word interop/向页脚添加新字段将删除现有字段

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

我一直在使用interop编辑现有的word文档。我的问题是;我需要在文档页脚中添加一个新字段,让我惊讶的是,它删除了现有的页脚字段,所以只剩下新添加的字段。没有关于它的明确文档,结果是出乎意料的。下面是我的代码:

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。你的页脚应该是什么?