通过Apache POI使用docx文件中的复选框进行操作

能请你帮我吗? 我需要通过Apache POI填写MS Word docx 模板中的复选框。复选框已通过“开发人员”选项卡->“控件”->“复选框”插入,并位于段落->“ w:sdt”标签内(不在段落->运行内)。

我尝试过paragraph.getcTP().getFldSimpleList(),但它返回0个字段。

那么还有另一种方法可以访问复选框吗?

XML部分:

<w:p w:rsidR="00C81acc" w:rsidRDefault="00C81acc" w:rsidP="004658AE">
    <w:pPr>
        <w:spacing w:line="276" w:lineRule="auto"/>
        <w:ind w:left="383" w:hanging="383"/>
        <w:rPr>
            <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
            <w:sz w:val="18"/>
            <w:szCs w:val="18"/>
        </w:rPr>
    </w:pPr>
    <w:sdt>
        <w:sdtPr>
            <w:rPr>
                <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
                <w:sz w:val="18"/>
                <w:szCs w:val="18"/>
            </w:rPr>
            <w:id w:val="615721754"/>
            <w14:checkbox>
                <w14:checked w14:val="0"/>
                <w14:checkedState w14:val="2612" w14:font="MS Gothic"/>
                <w14:uncheckedState w14:val="2610" w14:font="MS Gothic"/>
            </w14:checkbox>
        </w:sdtPr>
        <w:sdtContent>
            <w:r>
                <w:rPr>
                    <w:rFonts w:ascii="MS Gothic" w:eastAsia="MS Gothic" w:hAnsi="MS Gothic" w:cs="Arial" w:hint="eastAsia"/>
                    <w:sz w:val="18"/>
                    <w:szCs w:val="18"/>
                </w:rPr>
                <w:t>☐</w:t>
            </w:r>
        </w:sdtContent>
    </w:sdt>
    <w:r>
        <w:rPr>
            <w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
            <w:sz w:val="18"/>
            <w:szCs w:val="18"/>
        </w:rPr>
        <w:t xml:space="preserve"> Pass</w:t>
    </w:r>
</w:p>
LiJ86 回答:通过Apache POI使用docx文件中的复选框进行操作

apache poi到目前为止不支持此功能。而且由于它使用了XML命名空间中扩展的w14,甚至底层的ooxml-schema类也不支持此功能。这些模式类是根据2007年发布的XML的{​​{1}}模式生成的。从Office Open XML命名空间扩展的XML是后来的版本,而不是{{1}的一部分}。

因此,如果有人希望获得支持,那么就需要在非常低的w14级别上工作。但是对于复选框这样简单的事情,可以在此处作为示例显示。

以下代码包含Office Open XML类的工作草案。这提供了一种静态方法来检查给定的XML是否包含W14Checkbox。如果是这种情况,则可以从该CTSdtRun创建一个w14:checkbox对象。然后,该对象提供W14CheckboxCTSdtRun方法。

请注意,在getChecked中,不仅需要设置布尔值setChecked,而且需要设置setChecked的对应文本值。可以是未选中的Unicode字符“ BALLOT BOX”(U + 2610),也可以是选中的Unicode字符“ BALLOT BOX WITH CHECK”(U + 2612)。

完整示例:

w14:checkbox/w14:checked

注意:这只是一个工作草案,需要进行进一步开发才能投入生产。

本文链接:https://www.f2er.com/3153048.html

大家都在问