如何 "refresh"(在 c# 中)包含 table 内容的 word 文档以获得正确的字段页面?
How to "refresh" (in c#) a word document with table of contents in order to get correct page for a Field?
我的要求是使用 ms office interop (c#) 从 Word 文档中检索范围的页码和位置。特别是,我正在寻找一个字段的页面,同时遍历文档的字段。
我发现我的问题出在文档中(开始时)"generated" 内容,例如 table 的内容、table 的列表、table 的数字。
因此,对我来说,第二页上的字段被报告为第一页上的字段。如果我删除目录并替换为空格,则在正确的页面上会报告相同的范围。
这是代码的相关部分...
foreach (Field field in wordDocument.Fields)
{
field.Code.get_Information(WdInformation.wdActiveEndAdjustedPageNumber)
}
...而且,如果没有 TOC 或其他生成的元素,同样可以正常工作。
另外,显然有效的是我尝试找到表示某些文本的范围的页面。
if (range.Find.Execute(FindText: "xyz", MatchCase: false, Format: false, MatchWildcards: true, Forward: true))
{
Console.WriteLine("xyz page number is " + range.get_Information(WdInformation.wdActiveEndAdjustedPageNumber));
}
但我真的很想利用可用的字段列表,而不是在文档中搜索文本。
我尝试了一些方法,例如遍历 table 并更新它们 re-paginating,使应用程序可见。在我尝试基本上刷新文档并使目录采用其 "space" 以便正确报告页码的尝试中,似乎没有任何效果。
有人知道我错过了什么吗?
谢谢,
克里斯
p.s。我怀疑它是否重要,但基本上我正在尝试构建 "list of figures (or tables)",当没有一个时,用于书签目的。所以,我正在寻找某些作为标题的字段,我需要页面和位置。
目前看来,为此类字段获取可靠页码的解决方案是遍历文档段落,而不是文档字段(即即使我到达相同的字段)。
无论如何,我最终得到了这样的结果:
foreach (Paragraph parag in wordDocument.Paragraphs)
{
foreach (Field field in parag.Range.Fields)
{
// e.g. SEQ Equation \* ARABIC § MyEquation
if (field.Code.Text.StartsWith("SEQ "))
{
pageNo = parag.Range.get_Information(WdInformation.wdActiveEndAdjustedPageNumber);
...
}
}
}
我的要求是使用 ms office interop (c#) 从 Word 文档中检索范围的页码和位置。特别是,我正在寻找一个字段的页面,同时遍历文档的字段。
我发现我的问题出在文档中(开始时)"generated" 内容,例如 table 的内容、table 的列表、table 的数字。
因此,对我来说,第二页上的字段被报告为第一页上的字段。如果我删除目录并替换为空格,则在正确的页面上会报告相同的范围。
这是代码的相关部分...
foreach (Field field in wordDocument.Fields)
{
field.Code.get_Information(WdInformation.wdActiveEndAdjustedPageNumber)
}
...而且,如果没有 TOC 或其他生成的元素,同样可以正常工作。
另外,显然有效的是我尝试找到表示某些文本的范围的页面。
if (range.Find.Execute(FindText: "xyz", MatchCase: false, Format: false, MatchWildcards: true, Forward: true))
{
Console.WriteLine("xyz page number is " + range.get_Information(WdInformation.wdActiveEndAdjustedPageNumber));
}
但我真的很想利用可用的字段列表,而不是在文档中搜索文本。 我尝试了一些方法,例如遍历 table 并更新它们 re-paginating,使应用程序可见。在我尝试基本上刷新文档并使目录采用其 "space" 以便正确报告页码的尝试中,似乎没有任何效果。
有人知道我错过了什么吗?
谢谢, 克里斯
p.s。我怀疑它是否重要,但基本上我正在尝试构建 "list of figures (or tables)",当没有一个时,用于书签目的。所以,我正在寻找某些作为标题的字段,我需要页面和位置。
目前看来,为此类字段获取可靠页码的解决方案是遍历文档段落,而不是文档字段(即即使我到达相同的字段)。
无论如何,我最终得到了这样的结果:
foreach (Paragraph parag in wordDocument.Paragraphs)
{
foreach (Field field in parag.Range.Fields)
{
// e.g. SEQ Equation \* ARABIC § MyEquation
if (field.Code.Text.StartsWith("SEQ "))
{
pageNo = parag.Range.get_Information(WdInformation.wdActiveEndAdjustedPageNumber);
...
}
}
}