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

Docx4j 6.1.2-将平面开放XML转换为Xlsx

葛泳
2023-03-14

我可以使用以下代码从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);
FlatOpcXmlImporter flatOpcXmlImporter = new FlatOpcXmlImporter(new FileInputStream("testFlatOpc.xml"));
OpcPackage opcPackage = 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)

为什么FlatOpcXmlCreator会写入FlatopcXmllimporter无法读取的命名空间?

如果docx4j不可能,那么是否有其他方法可以从平面OPC XML创建Excel?

共有1个答案

濮阳振海
2023-03-14

此问题现已由https://github.com/plutext/docx4j/commit/f5f8b2c9caa9a3d8d339b74e7e878d19c56ad526修复

这将出现在下一个8.1.x版本中,或者您可以自己用该补丁修补6.1.2。

 类似资料:
  • XML输入文件: XML输入文件转换为XML输出文件。将XML输入文件的firstName、middleName和lastName标签合并为XML Ouput文件的name标签,将XML输入文件的address1、address2、city、state和pincode标签合并为XML Ouput文件的address标签。 我几乎转换了代码,但我在这里与empId作斗争。我已经在XSLT文件中手动输

  • 问题内容: 我有一些需要用XML迷惑的HTML文件。我们正在使用这些HTML为应用程序提供内容,但是现在我们必须以XML形式提供这些内容。 HTML文件包含,表格,div,图像,p,b或强标签等。 我用谷歌搜索并找到了一些应用程序,但是我还无法实现。 您能否建议一种将这些文件内容转换为XML的方法? 问题答案: 我成功使用了命令行实用程序。在Linux上,我使用迅速安装了它。然后命令: 给了一个x

  • 问题内容: 我试图将JSON输出转换为XML。不幸的是我得到这个错误: JSON根对象具有多个属性。根对象必须具有单个属性才能创建有效的XML文档。考虑指定DeserializeRootElementName。 这就是我到目前为止所创建的。 这是我的JSON输出: 我怎么解决这个问题? 问题答案: 尽管问题中提供的JSON并不完整,但您在顶层具有多个属性,如异常所示。您必须为其定义根以获取有效的X

  • 问题内容: 我有一个包含树数据的数组(按父ID)。我想将其转换为多维数组。做到这一点的最佳方法是什么?是否有任何简短功能? 源数组: 源数组中缺少某些父母。我希望缺少父项的项成为根。结果数组: 更新:删除方括号。 问题答案: 我认为PHP中没有内置函数可以做到这一点。 我尝试了以下代码,似乎可以按照您描述的方式准备嵌套数组: 我在为演示文稿SQL和PHP中的层次模型编写的PHP类中编写了类似的算法

  • 问题内容: 输入XML 输出Json 如何编写通用的xslt样式表,它将输入的xml转换为json 输入可能在根目录下有太多结果,在结果下可能有系统和名称,在系统下还有ID名称和值。 问题答案: 我从此处复制并粘贴的以下XSLT 应该可以帮助您将XML转换为JSON。谢谢 :)

  • 问题内容: 我正在尝试将xml中的xml转换为json。如果我使用简单的xml和json_encode进行简单的转换,则xml中的任何属性都不会显示。 所以我试图像这样手动解析它。 状态的输出不是 我究竟做错了什么? XML: 输出: var dump: 问题答案: 我想到了。json_encode处理对象的方式与处理字符串的方式不同。我将该对象转换为字符串,现在可以正常工作。