我正在构建一个MS Word加载项,它必须从文档中收集所有评论气球并在列表中汇总它们 . 我的结果将是一个ReviewItem类列表,其中包含Comment本身,段落编号和注释文本所在的页码 .
我的部分代码如下所示:
private static List<ReviewItem> FindComments()
{
List<ReviewItem> result = new List<ReviewItem>();
foreach (Comment c in WorkingDoc.Comments)
{
ReviewItem item = new ReviewItem()
{
Remark = c.Reference.Text,
Paragraph = c.Scope. ???, // How to determine the paragraph number?
Page = c.Scope. ??? // How to determine the page number?
};
result.Add(item);
}
return result;
}
Comment
类的 Scope
属性指向注释所在文档中的实际文本,其类型为 Microsoft.Office.Interop.Word.Range
. 我无法弄清楚如何确定该范围所在的页面和段落 .
对于段落编号,我实际上是指段落的“编号列表”编号,例如“2.3”或“1.3.2” .
有什么建议?谢谢!
3 回答
在Mike Regan的帮助下给了我答案(再次感谢Mike),我设法制定了一个我想在这里分享的解决方案 . 也许这也澄清了我的目标 . 在性能方面,这可能不是最快或最有效的解决方案 . 随意提出改进建议 .
我的代码的结果是一个ReviewItem类列表,将在别处处理 . 不用多说了,这是代码:
试试这个页码:
哪个应该给你一个页码的最终值 . 如果您想要开头的页面值,请先尝试:
Range.Information Property
WdInformation Enumeration
对于段落编号,请参阅以下内容:
我的猜测是采取上面返回的集合中的第一个段落对象,从该段落的末尾到文档的开头获取一个新的范围并获取此整数值:
这应该给出评论范围开头的准确段落编号 .
Range.Paragraphs
Paragraph Object Members
我认为有一种更简单的方法 . 您可以从
Range
对象本身获取它 .Range.get_Information
为您提供页面号,行号等信息, except you got to know how many pages or lines the range spans across. 这是捕获,一个范围不必在一个页面中 .因此,您可以获取范围的起点和终点,然后计算页面号,或行号等 . 这应该做:
您也可以对行号进行相同的操作: