我开发了一种工具,该工具可在Word文档上进行迭代,以根据文档中的样式提取文本,并将该文本插入XML模板中。
我需要能够检查段落中是否存在对图形的交叉引用,并提取图形引用或以某种方式对其进行标识,以便可以在XML文档中重现交叉引用。
经过大量搜索,我找不到任何可以执行此操作的信息。有关插入参考,但未从文档中检索参考的很多信息。
我一直在使用以下代码,这些代码在Word文档的每个段落中传递,以查看它是否包含任何字段,但不确定从何处去。有什么想法吗?
private void checkParaForCrossReferences(word.Paragraph eachPara)
{
var fields = eachPara.Range.Fields;
foreach (var field in fields)
{
//some code to get the cross reference information (figure or table number, caption or ID or something)
}
}
答案 0 :(得分:2)
Word使用REF
字段作为交叉引用,因此要获取段落的交叉引用,代码应如下所示
Word.Range rng = null;
foreach (para In doc.Paragraphs)
{
rng = para.Range;
foreach (fld In rng.Fields)
{
if (fld.Type = Word.WdFieldType.wdFieldRef)
{
Debug.Print("Code: " + fld.Code.Text + "; Result: " + fld.Result.Text);
}
}
}
这里最棘手的部分是REF字段实际引用的内容。如果将交叉引用插入Bookmark
以外的任何单词,则Word会自动将书签分配给文档中的该范围。书签名称以下划线_
开头,后跟Ref
和一个数字。这些默认情况下隐藏在页面和“书签”对话框中。典型的REF字段代码:REF _Ref1571107
因此,无法仅通过域代码来确定这是哪种交叉引用。根据插入图形的交叉引用时选择的选项,可能可以从Result
中获取。例如,如果交叉引用显示整个标题或“仅标签和数字”,则它将包含字符串Figure
,这很简单。
如果都不是这种情况,并且选择了其他三个选项之一,则可以从域代码中提取书签名称,并在文档文本中查找书签,然后从该范围中获取信息-确切地讲,将取决于各个文档以及如何引用这些数字。
目前,我没有运行C#环境,但是需要一个基本的VB代码来从REF
字段中查找书签名称:
sBkmName = Mid(fld.code, InStr(fld.code, "_Ref"), 11) 'a bookmark name is 11 characters long
Debug.Print ActiveDocument.Bookmarks(sBkmName).Range.Text