Word 互操作交叉引用尾注

Word interop cross referencing an endnote

我试图从文档中的 table 单元格中引用现有的 word 尾注,因此(使用 netoffice):

row.Cells[2].Range.InsertCrossReference(WdReferenceType.wdRefTypeEndnote, WdReferenceKind.wdEndnoteNumberFormatted, 1);

但是,这似乎将引用放在行的开头,而不是单元格 [2] 中文本的末尾。总的来说,我在网上找不到太多关于如何以编程方式添加脚注和尾注交叉引用的帮助。我怎样才能获得正确显示的参考?

问题是您的代码片段中指定的目标 Range 是整个单元格。您需要 "collapse" Range 才能位于单元格内。 (将范围想象成一个选择。如果你点击一个单元格的边缘,整个单元格被选中,包括它的结构元素。如果你然后按左箭头,选择被折叠成一个闪烁的工字梁。)

要转到单元格的开头:

Word.Range rngCell = row.Cells[2].Range;
rngCell.Collapse(Word.WdCollapseDirection.wdCollapseStart);
rngCell.InsertCrossReference(WdReferenceType.wdRefTypeEndnote, WdReferenceKind.wdEndnoteNumberFormatted, 1);

如果单元格有内容并且您希望它位于内容的末尾,那么您可以改用 wdCollapseEnd。棘手的部分是将目标点放在下一个单元格的开头,因此必须向后移动一个字符:

Word.Range rngCell = row.Cells[2].Range;
rngCell.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
rng.MoveEnd(Word.WdUnits.wdCharacter, -1);
rngCell.InsertCrossReference(WdReferenceType.wdRefTypeEndnote, WdReferenceKind.wdEndnoteNumberFormatted, 1);