Docx4j 6.1.2 - 将 Flat Open XML 转换为 Xlsx
Docx4j 6.1.2 - Convert Flat Open XML to Xlsx
我可以使用以下代码从 Xlsx 创建平面 OPC XML 文件:
SpreadsheetMLPackage spreadsheetMLPackage = SpreadsheetMLPackage.load(new File("test.xlsx"));
FlatOpcXmlCreator flatOpcXmlCreator = new FlatOpcXmlCreator(spreadsheetMLPackage);
String flatOpcXml = org.docx4j.XmlUtils.marshaltoString(flatOpcXmlCreator.get(), false, true, org.docx4j.jaxb.Context.jcXmlPackage);
Files.write(Path.of("testFlatOpc.xml"), flatOpcXml.getBytes(), StandardOpenOption.CREATE, StandardOpenOption.WRITE);
但如果我现在尝试读取生成的 Flat OPC XML 以便使用以下代码将其转换回 Xlsx
FlatOpcXmlImporter flatOpcXmlImporter = new FlatOpcXmlImporter(new FileInputStream("testFlatOpc.xml"));
OpcPackage opcPackage = flatOpcXmlImporter.get();
flatOpcXmlImporter.get() 调用抛出以下异常:
org.docx4j.openpackaging.exceptions.Docx4JException: Failed to add parts from relationships
at org.docx4j.convert.in.FlatOpcXmlImporter.addPartsFromRelationships(FlatOpcXmlImporter.java:297)
at org.docx4j.convert.in.FlatOpcXmlImporter.get(FlatOpcXmlImporter.java:221)
at at.apa.psp.TestExcel.main(TestExcel.java:38)
Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: Failed to getPart
at org.docx4j.convert.in.FlatOpcXmlImporter.getRawPart(FlatOpcXmlImporter.java:659)
at org.docx4j.convert.in.FlatOpcXmlImporter.getRawPart(FlatOpcXmlImporter.java:426)
at org.docx4j.convert.in.FlatOpcXmlImporter.getPart(FlatOpcXmlImporter.java:365)
at org.docx4j.convert.in.FlatOpcXmlImporter.addPartsFromRelationships(FlatOpcXmlImporter.java:295)
... 2 more
Caused by: javax.xml.bind.JAXBException: Preprocessing exception
- with linked exception:
[javax.xml.bind.UnmarshalException: unerwartetes Element (URI:"http://schemas.openxmlformats.org/spreadsheetml/2006/main", lokal:"workbook"). Erwartete Elemente sind <{http://schemas.openxmlformats.org/markup-compatibility/2006}AlternateContent>, ...
at org.docx4j.openpackaging.parts.JaxbXmlPartXPathAware.unmarshal(JaxbXmlPartXPathAware.java:707)
at org.docx4j.convert.in.FlatOpcXmlImporter.getRawPart(FlatOpcXmlImporter.java:515)
... 5 more
Caused by: javax.xml.bind.UnmarshalException: unerwartetes Element (URI:"http://schemas.openxmlformats.org/spreadsheetml/2006/main", lokal:"workbook"). Erwartete Elemente sind ...
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:662)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:258)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:253)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:120)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1063)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:498)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:480)
at com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:75)
at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:150)
是否可以使用 Docx4j 6.1.2 将 Flat OPC XML 转换为 Excel?
为什么 FlatOpcXmlCreator 会写入 FlatOpcXmlImporter 无法读取的命名空间?
如果无法使用 docx4j,是否有任何替代方法可以从 Flat OPC XML 创建 Excel?
现在已由 https://github.com/plutext/docx4j/commit/f5f8b2c9caa9a3d8d339b74e7e878d19c56ad526
修复
这将在下一个 8.1.x 版本中,或者您可以自己用该修复程序修补 6.1.2。
我可以使用以下代码从 Xlsx 创建平面 OPC XML 文件:
SpreadsheetMLPackage spreadsheetMLPackage = SpreadsheetMLPackage.load(new File("test.xlsx"));
FlatOpcXmlCreator flatOpcXmlCreator = new FlatOpcXmlCreator(spreadsheetMLPackage);
String flatOpcXml = org.docx4j.XmlUtils.marshaltoString(flatOpcXmlCreator.get(), false, true, org.docx4j.jaxb.Context.jcXmlPackage);
Files.write(Path.of("testFlatOpc.xml"), flatOpcXml.getBytes(), StandardOpenOption.CREATE, StandardOpenOption.WRITE);
但如果我现在尝试读取生成的 Flat OPC XML 以便使用以下代码将其转换回 Xlsx
FlatOpcXmlImporter flatOpcXmlImporter = new FlatOpcXmlImporter(new FileInputStream("testFlatOpc.xml"));
OpcPackage opcPackage = flatOpcXmlImporter.get();
flatOpcXmlImporter.get() 调用抛出以下异常:
org.docx4j.openpackaging.exceptions.Docx4JException: Failed to add parts from relationships
at org.docx4j.convert.in.FlatOpcXmlImporter.addPartsFromRelationships(FlatOpcXmlImporter.java:297)
at org.docx4j.convert.in.FlatOpcXmlImporter.get(FlatOpcXmlImporter.java:221)
at at.apa.psp.TestExcel.main(TestExcel.java:38)
Caused by: org.docx4j.openpackaging.exceptions.Docx4JException: Failed to getPart
at org.docx4j.convert.in.FlatOpcXmlImporter.getRawPart(FlatOpcXmlImporter.java:659)
at org.docx4j.convert.in.FlatOpcXmlImporter.getRawPart(FlatOpcXmlImporter.java:426)
at org.docx4j.convert.in.FlatOpcXmlImporter.getPart(FlatOpcXmlImporter.java:365)
at org.docx4j.convert.in.FlatOpcXmlImporter.addPartsFromRelationships(FlatOpcXmlImporter.java:295)
... 2 more
Caused by: javax.xml.bind.JAXBException: Preprocessing exception
- with linked exception:
[javax.xml.bind.UnmarshalException: unerwartetes Element (URI:"http://schemas.openxmlformats.org/spreadsheetml/2006/main", lokal:"workbook"). Erwartete Elemente sind <{http://schemas.openxmlformats.org/markup-compatibility/2006}AlternateContent>, ...
at org.docx4j.openpackaging.parts.JaxbXmlPartXPathAware.unmarshal(JaxbXmlPartXPathAware.java:707)
at org.docx4j.convert.in.FlatOpcXmlImporter.getRawPart(FlatOpcXmlImporter.java:515)
... 5 more
Caused by: javax.xml.bind.UnmarshalException: unerwartetes Element (URI:"http://schemas.openxmlformats.org/spreadsheetml/2006/main", lokal:"workbook"). Erwartete Elemente sind ...
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:662)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:258)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:253)
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:120)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1063)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:498)
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:480)
at com.sun.xml.bind.v2.runtime.unmarshaller.InterningXmlVisitor.startElement(InterningXmlVisitor.java:75)
at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:150)
是否可以使用 Docx4j 6.1.2 将 Flat OPC XML 转换为 Excel?
为什么 FlatOpcXmlCreator 会写入 FlatOpcXmlImporter 无法读取的命名空间?
如果无法使用 docx4j,是否有任何替代方法可以从 Flat OPC XML 创建 Excel?
现在已由 https://github.com/plutext/docx4j/commit/f5f8b2c9caa9a3d8d339b74e7e878d19c56ad526
修复这将在下一个 8.1.x 版本中,或者您可以自己用该修复程序修补 6.1.2。