使用Interop.Word

时间:2015-10-20 15:55:43

标签: c# ms-word office-interop

我正在将一组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;

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

  

错误1'Microsoft.Office.Interop.Word.Bookmarks'不包含'Item'的定义,也没有扩展方法'Item'接受'Microsoft.Office.Interop.Word.Bookmarks'类型的第一个参数找到(你是否缺少using指令或程序集引用?)F:\ BATLGroup \ AzureStorageContainer \ AzureStorageContainer \ AzureStorageContainer \ AzureHelpers \ OfficeAppHelpers.cs 19 44 AzureStorageContainer

我正在引用

  

汇编Microsoft.Office.Interop.Word       C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Visual Studio工具用于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 ....应该返回一个表示页面顶部距离的数字。

1 个答案:

答案 0 :(得分:1)

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

oDoc.Bookmarks["\\endofdoc"].Range

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

  

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

<强>更新

bookmarkRange.Information[WdInformation.wdVerticalPositionRelativeToPage]实际上返回一个浮点数,因此您需要将其转换为比较它,例如:

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

假设pos的类型与float相当。