当前位置: 首页 > 知识库问答 >
问题:

docx4j-如何获得docx复选框状态

华子昂
2023-03-14

我试图读取一堆格式相同的word docx文件,并将数据提取到数据库中。我对文本没有任何问题,但我在与复选框作斗争。我需要说的是,我是docx4j的新手,但已经在这个问题上挣扎了四天了。我真的很重视一些帮助/帮助/建议。

public static void main(String[] args) throws Exception {
    WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File("test.docx"));      
    MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
    Finder finder = new Finder(FldChar.class);
    new TraversalUtil(documentPart.getContent(), finder);
}

public static class Finder extends CallbackImpl {
    protected Class<?> typeToFind;
    protected Finder(Class<?> typeToFind) {
        this.typeToFind = typeToFind;
    }

    public List<Object> results = new ArrayList<Object>(); 

    @Override
    public List<Object> apply(Object o) {
        String txtVal="";
        System.out.println(o.getClass().getName());

        if (o instanceof org.docx4j.wml.CTSdtCell) {
            List<Object> objs = ((org.docx4j.wml.CTSdtCell)o).getSdtPr().getRPrOrAliasOrLock();
            findCheckbox(objs);
        }

        if (o instanceof org.docx4j.wml.SdtRun) {
            List<Object> objs = ((org.docx4j.wml.SdtRun)o).getSdtPr().getRPrOrAliasOrLock();
            findCheckbox(objs);
        }

        if (o instanceof org.docx4j.wml.SdtBlock) {
            List<Object> objs = ((org.docx4j.wml.SdtBlock)o).getSdtPr().getRPrOrAliasOrLock();
            findCheckbox(objs);
        }

        if (o instanceof org.docx4j.wml.Text) {
            System.out.println("      Text Value : "+((org.docx4j.wml.Text)o).getValue());
        }

        // Adapt as required
        if (o.getClass().equals(typeToFind)) {
            results.add(o);
        }
        return null;
    }

    private static void findCheckbox(List<Object> objs) {
        for (Object obj : objs) {
            if (obj instanceof javax.xml.bind.JAXBElement) {
                if (((javax.xml.bind.JAXBElement)obj).getDeclaredType().getName().equals("org.docx4j.w14.CTSdtCheckbox")) {
                    JAXBElement<CTSdtCheckbox> elem = ((javax.xml.bind.JAXBElement)obj);
                    org.docx4j.w14.CTSdtCheckbox cb = elem.getValue();
                    org.docx4j.w14.CTOnOff OnOff=cb.getChecked();
                    System.out.println("      CheckBox found with value="+OnOff.getVal());
                }
            }
        }
    }
}

结果是:

org.docx4j.wml.Tbl
org.docx4j.wml.Tr
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : WORK INSTRUCTION #
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Drawing
org.docx4j.dml.wordprocessingDrawing.Inline
org.docx4j.dml.CTBlip
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value :  
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : A
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value :  
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value :  
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : STEP BY STEP
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value :  
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : - 
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : WORK INSTRUCTION
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Drawing
org.docx4j.dml.wordprocessingDrawing.Inline
org.docx4j.dml.CTBlip
org.docx4j.wml.Tr
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : 1234567
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tr
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : TASK
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : Chlorine drum change
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : DATE
org.docx4j.wml.CTSdtCell
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : 12/07/2015
org.docx4j.wml.Tr
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : MACHINE
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : ORIGINATOR
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : D.GROVE
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : CLOCK NUMBER
org.docx4j.wml.CTSdtCell
      CheckBox found with value=1
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : ?
org.docx4j.wml.Tr
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : AREA
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : CHLORINE HOUSE
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : CHECKED
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value :  
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : (EXPERT)
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : J Clarke
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : CLOCK NUMBER
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : 4985
org.docx4j.wml.Tr
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : PPE 
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Drawing
org.docx4j.dml.wordprocessingDrawing.Anchor
org.docx4j.dml.CTBlip
org.docx4j.dml.CTColorChangeEffect
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : EYE
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Drawing
org.docx4j.dml.wordprocessingDrawing.Anchor
org.docx4j.dml.CTBlip
org.docx4j.dml.CTColorChangeEffect
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : EAR
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Drawing
org.docx4j.dml.wordprocessingDrawing.Anchor
org.docx4j.dml.CTBlip
org.docx4j.dml.CTColorChangeEffect
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : FOOT
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Drawing
org.docx4j.dml.wordprocessingDrawing.Anchor
org.docx4j.dml.CTBlip
org.docx4j.dml.CTColorChangeEffect
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : HEAD
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Drawing
org.docx4j.dml.wordprocessingDrawing.Anchor
org.docx4j.dml.CTBlip
org.docx4j.dml.CTColorChangeEffect
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : HAND
org.docx4j.wml.Tr
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.CTObject
org.docx4j.vml.CTShapetype
org.docx4j.vml.CTStroke
org.docx4j.vml.CTFormulas
org.docx4j.vml.CTF
org.docx4j.vml.CTF
org.docx4j.vml.CTF
org.docx4j.vml.CTF
org.docx4j.vml.CTF
org.docx4j.vml.CTF
org.docx4j.vml.CTF
org.docx4j.vml.CTF
org.docx4j.vml.CTF
org.docx4j.vml.CTF
org.docx4j.vml.CTF
org.docx4j.vml.CTF
org.docx4j.vml.CTPath
org.docx4j.vml.officedrawing.CTLock
org.docx4j.vml.CTShape
org.docx4j.vml.CTImageData
org.docx4j.wml.CTControl
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.CTObject
org.docx4j.vml.CTShape
org.docx4j.vml.CTImageData
org.docx4j.wml.CTControl
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.CTObject
org.docx4j.vml.CTShape
org.docx4j.vml.CTImageData
org.docx4j.wml.CTControl
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.CTObject
org.docx4j.vml.CTShape
org.docx4j.vml.CTImageData
org.docx4j.wml.CTControl
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.CTObject
org.docx4j.vml.CTShape
org.docx4j.vml.CTImageData
org.docx4j.wml.CTControl
org.docx4j.wml.Tr
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : COSHH
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : SPECIAL PPE REQUIREMENTS
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : *SITE 
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : R/A NUMBER
org.docx4j.wml.Tr
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : CONSIDERATION
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : PRODUCTS
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : B.A. EQUIPMENT
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : 12668
org.docx4j.wml.Tr
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.CTObject
org.docx4j.vml.CTShape
org.docx4j.vml.CTImageData
org.docx4j.wml.CTControl
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value : CHLORINE
org.docx4j.wml.R
org.docx4j.wml.Text
      Text Value :  GAS
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tr
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.Tc
org.docx4j.wml.P
org.docx4j.wml.P
org.docx4j.wml.CTBookmark
org.docx4j.wml.CTMarkupRange

现在,我已经为包含一个难以捉摸的复选框的单元格添加了mainDocumentPart.getXML()的输出。我在那里看不到任何东西告诉我价值。谁能告诉我我错过了什么吗?

<w:tc>
        <w:tcPr>
            <w:tcW w:w="1015" w:type="dxa"/>
            <w:tcBorders>
                <w:left w:val="single" w:color="auto" w:sz="24" w:space="0"/>
                <w:bottom w:val="single" w:color="auto" w:sz="24" w:space="0"/>
                <w:right w:val="single" w:color="auto" w:sz="24" w:space="0"/>
            </w:tcBorders>
            <w:vAlign w:val="center"/>
        </w:tcPr>
        <w:p w:rsidRPr="00A7008C" w:rsidR="00F909A4" w:rsidP="00017AE9" w:rsidRDefault="000F5760">
            <w:pPr>
                <w:jc w:val="center"/>
                <w:rPr>
                    <w:b/>
                    <w:color w:val="FFFFFF" w:themeColor="background1"/>
                </w:rPr>
            </w:pPr>
            <w:r>
                <w:rPr>
                    <w:b/>
                    <w:color w:val="FFFFFF" w:themeColor="background1"/>
                    <w:sz w:val="36"/>
                </w:rPr>
                <w:object w:dxaOrig="225" w:dyaOrig="225">
                    <v:shape type="#_x0000_t75" style="width:12pt;height:29.25pt" id="_x0000_i1063" o:ole="">
                        <v:imagedata o:title="" r:id="rId17"/>
                    </v:shape>
                    <w:control w:name="CheckBox11" w:shapeid="_x0000_i1063" r:id="rId18"/>
                </w:object>
            </w:r>
            <w:bookmarkEnd w:id="0"/>
        </w:p>
    </w:tc>

共有1个答案

盖弘毅
2023-03-14

我已经破解了!!CTIMageData指向可以通过文档关系访问的图像。这些图像包含打勾或未打勾的框。通过检查图像的大小,我可以告诉它是哪一个。

我不理解单词只是为了表面的使用,也不知道这些“复选框”是如何创建的,但似乎它们的创建方式与我的测试中的不同。因此,我不知道如果/当组织升级其MS Office软件、编辑和保存文档文件时,这些图像是否会改变。然而,在初始加载后,对我的软件的需求会迅速改变,因此对我来说,这种风险的含义很小。

 类似资料:
  • 这会找到我想要的节点吗?如果没有,我如何获得节点并正确地更改属性? 谢谢。马格努斯

  • 问题内容: 我一直在使用python实现自定义解析器,并使用该解析数据来格式化要在内部分发的word文档。到目前为止,所有格式都非常简单明了,但是我对如何在单个表格单元格中插入复选框感到非常困惑。 我尝试在python-docx中使用python对象函数(使用等),这会导致MS Word在尝试打开文件时引发以下错误:“文件xxxx无法打开,因为内容有问题详细信息:文件已损坏,无法打开”。 经过一段

  • 当html页面上没有任何变量可以切换时,是否有人知道如何使用selenium处理或读出复选框的状态(true/false)。我已经尝试了常用函数。isselected()和。isenabled(),但这些函数只读取不可用的值。 有人知道有没有办法得到这个身份吗?此外,xml的屏幕截图以及它是哪个元素。 如果有人有主意就太好了。我在用Java编程。

  • 我正在开发一个android烹饪应用程序(使用java),主页有一个回收器视图,其中填充了用户可以喜欢的食谱(类似于FaceBook帖子)。喜欢按钮是一个复选框,保存每个食谱的喜欢复选框状态的最佳方式是什么,所以当用户退出应用程序并再次登录时,他们不会多次喜欢同一个食谱。 在这种情况下,使用SharedReference是一个好主意吗? **im使用MySql作为数据库,不使用firebase。

  • 我正在尝试使用DOCX4j、Java11、Spring Boot2.3.5、Ubuntu18.04.5将DOCX转换为HTML,我正在Tomcat9上运行我的.war文件。 当我运行代码时,我得到这个错误。我怎么才能修好这个? 我的代码 编辑:我试着在Tomcat9、Windows10上运行同样的战争,一切都正常。有趣...但是如何在Linux-Tomcat上解决这个问题呢?(检查了tomcat/

  • 问题内容: 当我点击提交按钮时,我试图打印出Flask中的复选框值。 app.py片段: HTML: 当我按下“提交”按钮时,它将返回“无”。 我也尝试过request.form.get() 这也将返回“无”。 问题答案: 提交HTML表单时,未选中的复选框不会发送任何数据。在Flask方面,由于没有接收到任何值,因此不会有key 。如果要检查是否选中了一个复选框(具有唯一的名称),只需测试其名称