无法使用 Interop.Word 在 C# 版本中设置书签范围

cant set bookmark range in C# version using Interop.Word

我正在将一组 vb.net 助手转换为 C#。以下代码片段在 VB.Net

中运行良好
para2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("\endofdoc").Range)

其中 para2 的类型为 Word.Paragraph

我在许多文章中看到的用于设置书签范围的转换后的 c# 代码是

var bookmarkRange= oDoc.Bookmarks.get_Item((object)"\endofdoc").Range;
var para2 = oDoc.Content.Paragraphs.Add(bookmarkRange);

ReSharper 表示这需要使用索引 属性,更改后会将其转换为

var bookmarkRange = oDoc.Bookmarks.Item[(object)"\endofdoc"].Range;

两个版本都没有构建,错误是

Error 1 'Microsoft.Office.Interop.Word.Bookmarks' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'Microsoft.Office.Interop.Word.Bookmarks' could be found (are you missing a using directive or an assembly reference?) F:\BATLGroup\AzureStorageContainer\AzureStorageContainer\AzureStorageContainer\AzureHelpers\OfficeAppHelpers.cs 19 44 AzureStorageContainer

我在引用

Assembly Microsoft.Office.Interop.Word C:\Program Files (x86)\Microsoft Visual Studio 14.0\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Word.dll

感谢任何帮助。

加分项:

  do
        {
            bookmarkRange.ParagraphFormat.SpaceAfter = 6;
            bookmarkRange.InsertAfter("A line of text");
            bookmarkRange.InsertParagraphAfter();
        } while (pos >= bookmarkRange.Information[WdInformation.wdVerticalPositionRelativeToPage]);

此部分在 bookmarkRange.Information 上有误。它说你不能比较一个 int 和一个对象。 wdVertical.... 应该是 return 一个数字,表示距页面顶部的距离。

oDoc.Bookmarks.Item("\endofdoc").Range 的 C# 等价物是:

oDoc.Bookmarks["\endofdoc"].Range

... 这是因为 C# 没有像 VB 那样实现 Item 属性,根据 this link:

[...] The C# language uses the keyword to define the indexers instead of implementing the Item property. Visual Basic implements Item as a default property, which provides the same indexing functionality.

更新:

bookmarkRange.Information[WdInformation.wdVerticalPositionRelativeToPage] 实际上 return 是一个浮点数,所以你需要转换它来比较它,例如:

pos >= (float)bookmarkRange.Information[WdInformation.wdVerticalPositionRelativeToPage]);

假设 pos 是与 float 相当的类型。