2015-10-20 71 views
0

我正在將vb.net套件的幫助器轉換爲c#。下面的代碼片段工作正常,在VB.Net不能在C#版本中使用Interop.Word設置書籤範圍

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

其中PARA2是oftype 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」不包含關於「項」和沒有擴展方法「項」接受型的第一參數'的定義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)的\微軟的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

的C#相當於oDoc.Bookmarks.Item("\endofdoc").Range是:

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

...這是因爲沒有按照this link C#不落實Item屬性如VB:

[。 ..] C#語言使用關鍵字來定義索引器,而不是使用Item屬性的 。 Visual Basic實現Item作爲默認屬性 ,該屬性提供了相同的索引功能。

更新

bookmarkRange.Information[WdInformation.wdVerticalPositionRelativeToPage]實際上返回一個浮點數,所以你需要投它來比較它,如:

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

這是假設POS是的類型可以浮動。

+0

哇,我試過的每一個可能的迭代,包括括號中的衆多,我很愚蠢我錯過了那一個。我還有一個問題。如果您願意,請參閱後期更新。 – dinotom

+0

它發生在我們最好的;-)答案更新。 – DanL

+0

在C#中\必須被轉義,所以它是「\\ endofdoc」 – dinotom