识别Microsoft Word中的表ID

时间:2013-07-22 04:27:40

标签: ms-word docx

我的word文档中有很多表。我想唯一地标识那些表,但是microsoft offfice没有为它们提供任何唯一标识符(ID)。那么有什么办法可以唯一地识别微软词表吗?

问题:
用户为我提供了带有表格的word文件。我必须将它们转换成图像。如果用户提供了相同的文件,但表的内容已更新,那么我必须更新该图像。所有删除和再次生成所有图像都不适用于我的情况,因为我无法更改我首先分配给它的图像的名称。

我尝试了什么。

  1. 生成word doc的xml并查看是否有任何id或唯一标识符。但不存在这样的事情。
  2. 查看表属性,其中只有一个字段alt文本但仍然不可靠,因为用户可以更改它。

1 个答案:

答案 0 :(得分:2)

这是表格在XML(3 * 3)中的样子:

<w:tbl>
            <w:tblPr>
                <w:tblStyle w:val="Grilledutableau"/>
                <w:tblW w:type="auto" w:w="0"/>
                <w:tblLook w:firstColumn="1" w:firstRow="1" w:lastColumn="0" w:lastRow="0" w:noHBand="0" w:noVBand="1" w:val="04A0"/>
            </w:tblPr>
            <w:tblGrid>
                <w:gridCol w:w="3070"/>
                <w:gridCol w:w="3071"/>
                <w:gridCol w:w="3071"/>
            </w:tblGrid>
            <w:tr w:rsidR="00153204" w:rsidTr="00153204">
                <w:tc>
                    <w:tcPr>
                        <w:tcW w:type="dxa" w:w="3070"/>
                    </w:tcPr>
                    <w:p w:rsidR="00153204" w:rsidRDefault="00153204"/>
                </w:tc>
                <w:tc>
                    <w:tcPr>
                        <w:tcW w:type="dxa" w:w="3071"/>
                    </w:tcPr>
                    <w:p w:rsidR="00153204" w:rsidRDefault="00153204"/>
                </w:tc>
                <w:tc>
                    <w:tcPr>
                        <w:tcW w:type="dxa" w:w="3071"/>
                    </w:tcPr>
                    <w:p w:rsidR="00153204" w:rsidRDefault="00153204"/>
                </w:tc>
            </w:tr>
            <w:tr w:rsidR="00153204" w:rsidTr="00153204">
                <w:tc>
                    <w:tcPr>
                        <w:tcW w:type="dxa" w:w="3070"/>
                    </w:tcPr>
                    <w:p w:rsidR="00153204" w:rsidRDefault="00153204"/>
                </w:tc>
                <w:tc>
                    <w:tcPr>
                        <w:tcW w:type="dxa" w:w="3071"/>
                    </w:tcPr>
                    <w:p w:rsidR="00153204" w:rsidRDefault="00153204"/>
                </w:tc>
                <w:tc>
                    <w:tcPr>
                        <w:tcW w:type="dxa" w:w="3071"/>
                    </w:tcPr>
                    <w:p w:rsidR="00153204" w:rsidRDefault="00153204"/>
                </w:tc>
            </w:tr>
            <w:tr w:rsidR="00153204" w:rsidTr="00153204">
                <w:tc>
                    <w:tcPr>
                        <w:tcW w:type="dxa" w:w="3070"/>
                    </w:tcPr>
                    <w:p w:rsidR="00153204" w:rsidRDefault="00153204"/>
                </w:tc>
                <w:tc>
                    <w:tcPr>
                        <w:tcW w:type="dxa" w:w="3071"/>
                    </w:tcPr>
                    <w:p w:rsidR="00153204" w:rsidRDefault="00153204"/>
                </w:tc>
                <w:tc>
                    <w:tcPr>
                        <w:tcW w:type="dxa" w:w="3071"/>
                    </w:tcPr>
                    <w:p w:rsidR="00153204" w:rsidRDefault="00153204"/>
                </w:tc>
            </w:tr>
        </w:tbl>

这里有一些ID,但如果用户添加表格,移动它,这些ID将会改变......

您可以做的是自己添加该标识符:

向表中添加特定的替换字符串(例如ID:1)

这会在w:tblCaption属性中添加此ID:

    <w:tblPr>
        <w:tblStyle w:val="Grilledutableau"/>
        <w:tblW w:type="auto" w:w="0"/>
        <w:tblLook w:firstColumn="1" w:firstRow="1" w:lastColumn="0" w:lastRow="0" w:noHBand="0" w:noVBand="1" w:val="04A0"/>
        <w:tblCaption w:val="ID:1"/>
    </w:tblPr>

要在单词中添加此标题:右键单击表格 - &gt;属性 - &gt;文本/替换

在要识别的每个表之前放置一些文本元素

这会在表

之前添加以下xml
    <w:p w:rsidR="006B0CC1" w:rsidRDefault="006B0CC1">
        <w:r>
            <w:t>ID :1</w:t>
        </w:r>
        <w:bookmarkStart w:id="0" w:name="_GoBack"/>
        <w:bookmarkEnd w:id="0"/>
    </w:p>

我会选择第一种可能性,因为它很容易读取这些属性并且它们位于表格中,因此您只需要解析表格元素。