在c#版本中不能使用Interop.Word设置书签范围



我正在将vb.net的一组助手转换为c#。下面的代码片段在VB中工作得很好。净

para2 = oDoc.Content.Paragraphs.Add(oDoc.Bookmarks.Item("endofdoc").Range)

其中para2的类型为Word。段

我在很多文章中看到的用来设置书签范围的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;

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

错误1"Microsoft.Office.Interop.Word。"Bookmarks'不包含'Item'的定义,也没有扩展方法'Item'接受类型为'Microsoft.Office.Interop.Word '的第一个参数。可以找到书签(您是否缺少using指令或程序集引用?)F:BATLGroupAzureStorageContainerAzureStorageContainerAzureStorageContainerAzureHelpers officeapphelers .cs 19 44 AzureStorageContainer

我引用的是

组装Microsoft.Office.Interop.WordC:Program Files (x86)Microsoft Visual Studio 14.0Visual Studio Tools for OfficePIAOffice15Microsoft.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……应该返回一个数字,表示与页面顶部的距离

oDoc.Bookmarks.Item("endofdoc").Range等价的c#代码是:

oDoc.Bookmarks["\endofdoc"].Range

…这是因为c#不像VB那样实现Item属性,根据这个链接:

[…c#语言使用关键字来定义索引器,而不是实现Item属性。Visual Basic将Item实现为默认属性,它提供相同的索引功能。

:

bookmarkRange.Information[WdInformation.wdVerticalPositionRelativeToPage]行实际上返回一个浮点数,所以你需要对它进行强制转换来比较它,例如:

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

这里假设pos的类型与float类似

最新更新