我正在将一组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 ....应该返回一个表示页面顶部距离的数字。
答案 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相当。