在Java中读取xlsx复选框值

在Java中读取xlsx复选框值,java,excel,checkbox,apache-poi,xlsx,Java,Excel,Checkbox,Apache Poi,Xlsx,我正在读一个Java的xlsx文件,我需要选中一些复选框。现在我正在使用ApachePOI来实现这一点,但是我看不出如何使用Developer选项卡->Insert->Form控件访问这些复选框,这些复选框是插入excel的 对于xls文件,我通过以下提示访问了它们: 在poi how-to页面的XSSF和SAX事件API部分中,我可以看到如何使用SAXSF解析器浏览文档。这样,我也可以看到复选框在工作表上,但我无法得到它们的值。 我所拥有的是: public XMLReader fetchSh

我正在读一个Java的xlsx文件,我需要选中一些复选框。现在我正在使用ApachePOI来实现这一点,但是我看不出如何使用Developer选项卡->Insert->Form控件访问这些复选框,这些复选框是插入excel的

对于xls文件,我通过以下提示访问了它们:

在poi how-to页面的XSSF和SAX事件API部分中,我可以看到如何使用SAXSF解析器浏览文档。这样,我也可以看到复选框在工作表上,但我无法得到它们的值。 我所拥有的是:

public XMLReader fetchSheetParser(SharedStringsTable sst) throws SAXException {
    XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
    ContentHandler handler = new SheetHandler();
    parser.setContentHandler(handler);
    return parser;
}

private static class SheetHandler extends DefaultHandler {
    private boolean inControl;

    public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
        if (inControl || "control".equals(localName)) {
            System.out.print(name + ": ");
            for (int i = 0; i < attributes.getLength(); i++) {
                System.out.print(attributes.getQName(i) + "=" + attributes.getValue(i) + "; ");
            }
            inControl = true;
            System.out.println();
        }
    }

    public void endElement(String uri, String localName, String name) throws SAXException {
        if (inControl) {
            if ("control".equals(localName)) {
                inControl = false;
            }
        }
    }

    public void characters(char[] ch, int start, int length) throws SAXException {
        if (inControl) {
            System.out.println("  value: " + new String(ch, start, length));
        }
    }
}
所以复选框在那里,但我不知道它的值。。。
有人能帮我一下吗?

你说得对,POI目前无法读取这些值,因为它需要比现在使用的更新版本的OOXML规范:

手动XML解析的关系似乎是从worksheets/sheetX.XML通过worksheets/_rels/sheetX.XML.rels,然后从那里到包含实际选中属性的ctrlProps/ctrlPropX.XML

在sheetX.xml中,控件标记中的r:id指向关系:

1. 190500 0 171450 使用此id,您可以通过关系文件识别相关的ctrlProp.xml-file:

通过此选项,您可以访问文件../ctrlProps/ctrlProp1.xml,其中包含已检查状态:

control: shapeId=1025; r:id=rId4; name=Check Box 1; 
controlPr: defaultSize=0; autoFill=0; autoLine=0; autoPict=0; 
anchor: moveWithCells=1; 
from: 
xdr:col: 
  value: 1
xdr:colOff: 
  value: 371475
xdr:row: 
  value: 1
xdr:rowOff: 
  value: 85725
to: 
xdr:col: 
  value: 2
xdr:colOff: 
  value: 542925
xdr:row: 
  value: 2
xdr:rowOff: 
  value: 104775
control: shapeId=1026; r:id=rId5; name=Check Box 2; 
controlPr: defaultSize=0; autoFill=0; autoLine=0; autoPict=0; 
anchor: moveWithCells=1; 
from: 
xdr:col: 
  value: 1
xdr:colOff: 
  value: 323850
xdr:row: 
  value: 3
xdr:rowOff: 
  value: 9525
to: 
xdr:col: 
  value: 2
xdr:colOff: 
  value: 495300
xdr:row: 
  value: 4
xdr:rowOff: 
  value: 28575