首页 > 解决方案 > 插入 Ooxml 并保留原始 XML 的结构

问题描述

我想在word文档中指定的位置添加SDT,但是通过insertooxml方法替换了表中的OOXML和段落后,发现SDT的位置和我预想的不一样。SDT -> p -> R 和 P -> SDT -> R 都会被 SDT -> Tc -> p -> R 替换。我的代码:

起源ooxml:

<w:tbl>
    <w:tblPr>
        <w:tblStyle w:val="a3"/>
        <w:tblW w:w="0" w:type="auto"/>
        <w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/>
    </w:tblPr>
    <w:tblGrid>
        <w:gridCol w:w="2765"/>
    </w:tblGrid>
    <w:tr w:rsidTr="000C2493">
        <w:tc>
            <w:tcPr>
                <w:tcW w:w="2765" w:type="dxa"/>
            </w:tcPr>
            <w:p w:rsidR="00044EAA" w:rsidRDefault="00044EAA">
                <w:r>
                <w:rPr>
                    <w:rFonts w:hint="eastAsia"/>
                </w:rPr>
                <w:t>5</w:t>
            </w:r>
            <w:r>
                <w:t>55</w:t>
            </w:r>
            </w:p>
        </w:tc>
    </w:tr>
</w:tbl>

在段落外添加 SDT:

<w:body>
    <w:sdt>
        <w:sdtPr>
            <w:alias w:val="test"/>
            <w:tag w:val="test"/>
        </w:sdtPr>
        <w:sdtContent>
            <w:p w14:paraId="182ACA64" w14:textId="19FBA58A" w:rsidR="00555734" w:rsidRDefault="00F20FAA" w:rsidP="00555734">
                <w:r>
                    <w:rPr>
                        <w:rFonts w:hint="eastAsia"/>
                    </w:rPr>
                    <w:t>5</w:t>
                </w:r>
                <w:r>
                    <w:t>55</w:t>
                </w:r>
            </w:p>
        </w:sdtContent>
    </w:sdt>
</w:body>

代码:

paragraph.insertOoxml(ooxml, "Replace")

但我得到了结果:

<w:tbl>
    <w:tblPr>
        <w:tblStyle w:val="a3"/>
        <w:tblW w:w="0" w:type="auto"/>
        <w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/>
    </w:tblPr>
    <w:tblGrid>
        <w:gridCol w:w="2765"/>
    </w:tblGrid>
    <w:tr w:rsidTr="000C2493">
        <w:sdt>
            <w:sdtPr>
                <w:alias w:val="test"/>
                <w:tag w:val="test"/>
            </w:sdtPr>
            <w:sdtEndPr/>
            <w:sdtContent>
                <w:tc>
                    <w:tcPr>
                        <w:tcW w:w="2765" w:type="dxa"/>
                    </w:tcPr>
                    <w:p w:rsidR="00044EAA" w:rsidRDefault="00044EAA">
                        <w:r>
                            <w:rPr>
                                <w:rFonts w:hint="eastAsia"/>
                            </w:rPr>
                            <w:t>5</w:t>
                        </w:r>
                        <w:r>
                            <w:t>55</w:t>
                        </w:r>
                    </w:p>
                </w:tc>
            </w:sdtContent>
        </w:sdt>
    </w:tr>
</w:tbl>

在这个结果中,SDT 的位置被调整到了 Tc 以上。</p>

输入输出不应该是这样的:

输入:原始段落结构:body->tbl->tc->p->r,ooxml 结构:body->sdt->p->r
预期输出(替换后):body->tbl->tc-> sdt- >p->r
但现在:body->tbl-> sdt->tc->p->r

输入:原始段落结构:body->tbl->tc->p->r,ooxml 结构:body->p->sdt->r
预期输出(替换后):body->tbl->tc->p -> sdt->r
但现在:body->tbl-> sdt->tc->p->r

最后的

我尝试了许多可能的方法,但不幸的是它们不能正常工作。这replace OOXML似乎失去了原始 OOXML 的结构。

任何问题或建议将不胜感激。

标签: office-jsopenxmloffice-addinsword

解决方案


推荐阅读