我正在将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类似