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

Apache POI生成损坏的excel xlsx文件是因为独立或XMLNS吗?

柳培
2023-03-14

我有一个web应用程序(tomcat 8.5.4,java 1.7.0_72)以前使用Apache POI生成有效的xlsx excel文件。我正在将应用程序转换为使用maven管理jar依赖项,现在生成的文件被Excel视为已损坏(或无效)。我根本没有更改生成文件的代码,所包含的JAR大部分都是相同的,只是一些版本更改和删除了一些未使用且不在maven依赖树中的JAR(下面列出的删除的JAR)。

有没有人知道我会做什么来导致POI以不同的方式生成文件,或者为什么excel认为这些更改使其无效?我已经搜索了很多与POI和损坏的excel文件的错误,它似乎有几个错误在POI可能破坏现有的文件或破坏创建的大文件,但没有任何看起来像它适用于这种情况。我在这里看到了几个问题,它们看起来很相似,但最终没有被应用。

当我将之前和之后创建的xlsx文件更改为zip文件并将其解压缩,然后将目录与windiff进行比较时,差异是(工作->corrupted)。

[content_types].xml

 <?xml version="1.0" encoding="UTF-8" standalone="no"?> -> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> -> <Types>

_rels.rels,_rels\workbook.xml.rels

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 -> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> -> <Relationships>

docprops\core.xml

创建的时间不同

<?xml version="1.0" encoding="UTF-8" standalone="no"?> -> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

xl\styles.xml

numFmtId低1

xl\worksheet\sheet1.xml,docprops\app.xml,xl\sharedstrings.xml,xl\workbook.xml

一模一样

我尝试将所有poi版本升级到3.1.14,但这并没有解决问题。我尝试回到以前工作的POI[-OOXML-Schemas]-3.11-20141221JAR,但这并没有解决问题。我尝试将SXSSFWorkbook切换到普通的XSSFWorkbook,但这没有解决问题。

下面是我在转换到maven时删除的JAR列表,这些JAR对apache POI有影响吗?

ecj-4.5.1
el-impl-2.2
itext-2.0.8
jimi-1.0
js
opencsv-1.8
standard (1.1.2)

共有1个答案

文嘉禧
2023-03-14

结果是由一个jar(Xalan-2.4.1)引起的,该jar(xalan-2.4.1)作为FOP-0.20.05的依赖项拉入,在转换为Maven之前没有包含该jar(xalan-2.4.1)。一旦我排除了这种依赖关系,它就会再次创建有效的文件。我应该怀疑那些2002年和2003年的旧罐子。

万一以后有人出现类似的问题,但不是由相同的罐子引起的,这里是我的故障排除方法:

我打开了POI日志记录

-Dorg.apache.poi.util.POILogger=org.apache.poi.util.SystemOutLogger
-Dpoi.log.level=1

我发现了一些错误,抱怨XML解析器过时和无法设置SAX安全管理器。一些互联网搜索导致我将xercesImpl(我们的应用程序之前没有包含)从FOP-0.20.5中排除。排除它修复了记录器中的错误,但是正在生成的文件仍然被excel认为是损坏的,并且仍然有相同的差异。

最后,我做了一个新的简单的maven java应用程序,它使用POI创建了一个非常简单的excel文件。我最初尝试使用poi和poi-ooxml作为依赖项,它生成了一个有效的文件。当我从完整的应用程序中添加所有依赖项时,它生成了一个无效的文件。然后我一次移除一个依赖项,直到它起作用。问题依赖项是fop,我仍然需要它,所以我尝试排除我们的应用程序以前没有包含的每一个依赖项,直到文件工作并确定xalan是问题所在。

 类似资料:
  • Docx4J生成的Excel工作簿总是说损坏了,但我无法确定Excel不喜欢底层XML的什么,更不用说如何修复它了。 我的用例如下:我试图定期自动生成一个带有图表和图形的excel工作簿。只有原始数据会改变,但随着原始数据的改变,其他一切都会动态更新。 null null 在我的空白工作簿之前和之后 欢迎所有的想法。

  • 问题内容: 我们有一段代码可以在我们的系统上生成一个zip文件。一切正常,但是有时该Zip文件在由FilZip或WinZip打开时被视为已损坏。 所以这是我的问题:我们如何以编程方式检查生成的zip文件是否损坏? 这是我们用于生成zip文件的代码: 我们在这里做错了什么吗? 编辑:实际上,上面的代码是绝对可以的。我的问题是我正在为用户重定向WRONG流。因此,与其打开一个zip文件,不如打开一个完

  • 问题内容: 给定D3js代码 ,例如: 如何使用我的D3js代码和NodeJS生成正确的独立* .svg文件? 问题答案: Github存储库 svgcreator.node.js 可以尝试。 D3完全不关心实际生成SVG的原因。仅创建SVG的主要问题是您不能使用Javascript,这当然意味着您不能使用D3。除了基本的禁忌外,没有什么可以阻止您了:) 概念验证: 受其他答案的启发,下面是一些使

  • 问题内容: 我使用Eclipse在Windows 7中创建了一个jar文件。当我尝试打开jar文件时,它说jar文件无效或损坏。谁能建议我为什么jar文件无效? 问题答案: 当您在Windows资源管理器中双击一个JAR文件时,会发生这种情况,但是JAR本身实际上不是 可执行的 JAR。真正的可执行JAR至少应具有带有方法的类,并在中引用它。 在Eclispe中,您需要将项目导出为 Runnabl

  • 我有一个问题,其中PdfWriter从iText7.0.4.0(。NET 4.5.1)为某些输入的PDF文件生成损坏的PDF文档。 详细说明,格式良好的段落的PDF文件没有问题。但是,如果输入的PDF包含不规则的内容(对于缺乏更好的词;请参考谷歌驱动器中的示例),PdfWriter会产生损坏的PDF文件;损坏,我的意思是文件可以打开,但它显示的空白页具有极高的缩放(在Adobe Reader XI

  • 我正试着用格雷德做一个火花罐。构建成功,但文件以一种微妙的方式损坏:尝试运行它会产生: 不过JAR本身看起来很好:缺少的类就在那里,当我解压它时,我可以很好地运行项目。 这是文件: Gradle版本是7.3.3 再现此问题的最小项目的完整代码可以在https://github.com/SashaOv/shadow-jar-repro 谢谢你的线索