繁体   English   中英

C#VSTO如何从Word文档返回交叉引用

[英]C# VSTO How can can I return the cross references from the Word document

我开发了一种工具,该工具可在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)

     }
}

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任何内容时,将自动为文档中的该范围分配一个书签。 书签名称以下划线_开头,后跟Ref和数字。 这些默认情况下隐藏在页面和“书签”对话框中。 典型的REF字段代码: REF _Ref1571107

因此,无法仅通过域代码来确定这是哪种交叉引用。 根据在插入图形的交叉引用时选择的选项, 可能可以从Result获取它。 例如,如果交叉引用显示整个标题或“仅标签和数字”,则它将包含字符串Figure ,这很简单。

如果这两种情况都不是,并且选择了其他三个选项之一,则可以从域代码中提取书签名称,并在文档文本中查找书签,然后从该范围中获取信息-具体取决于单个文档以及如何引用这些数字。

目前,我没有C#环境在运行,但是从REF字段中查找书签名称的基本VB代码是:

sBkmName = Mid(fld.code, InStr(fld.code, "_Ref"), 11) 'a bookmark name is 11 characters long
Debug.Print ActiveDocument.Bookmarks(sBkmName).Range.Text

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM