无法使用 Interop.Word 在 C# 版本中设置书签范围
cant set bookmark range in C# version using Interop.Word
我正在将一组 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;
两个版本都没有构建,错误是
Error 1 'Microsoft.Office.Interop.Word.Bookmarks' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'Microsoft.Office.Interop.Word.Bookmarks' could be found (are you missing a using directive or an assembly reference?) F:\BATLGroup\AzureStorageContainer\AzureStorageContainer\AzureStorageContainer\AzureHelpers\OfficeAppHelpers.cs 19 44 AzureStorageContainer
我在引用
Assembly Microsoft.Office.Interop.Word
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Visual Studio Tools for 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.... 应该是 return 一个数字,表示距页面顶部的距离。
oDoc.Bookmarks.Item("\endofdoc").Range
的 C# 等价物是:
oDoc.Bookmarks["\endofdoc"].Range
... 这是因为 C# 没有像 VB 那样实现 Item
属性,根据 this link:
[...] The C# language uses the keyword to define the indexers instead of
implementing the Item property. Visual Basic implements Item as a
default property, which provides the same indexing functionality.
更新:
行 bookmarkRange.Information[WdInformation.wdVerticalPositionRelativeToPage]
实际上 return 是一个浮点数,所以你需要转换它来比较它,例如:
pos >= (float)bookmarkRange.Information[WdInformation.wdVerticalPositionRelativeToPage]);
假设 pos 是与 float 相当的类型。
我正在将一组 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;
两个版本都没有构建,错误是
Error 1 'Microsoft.Office.Interop.Word.Bookmarks' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'Microsoft.Office.Interop.Word.Bookmarks' could be found (are you missing a using directive or an assembly reference?) F:\BATLGroup\AzureStorageContainer\AzureStorageContainer\AzureStorageContainer\AzureHelpers\OfficeAppHelpers.cs 19 44 AzureStorageContainer
我在引用
Assembly Microsoft.Office.Interop.Word C:\Program Files (x86)\Microsoft Visual Studio 14.0\Visual Studio Tools for 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.... 应该是 return 一个数字,表示距页面顶部的距离。
oDoc.Bookmarks.Item("\endofdoc").Range
的 C# 等价物是:
oDoc.Bookmarks["\endofdoc"].Range
... 这是因为 C# 没有像 VB 那样实现 Item
属性,根据 this link:
[...] The C# language uses the keyword to define the indexers instead of implementing the Item property. Visual Basic implements Item as a default property, which provides the same indexing functionality.
更新:
行 bookmarkRange.Information[WdInformation.wdVerticalPositionRelativeToPage]
实际上 return 是一个浮点数,所以你需要转换它来比较它,例如:
pos >= (float)bookmarkRange.Information[WdInformation.wdVerticalPositionRelativeToPage]);
假设 pos 是与 float 相当的类型。