gpt4 book ai didi

excel-2007 - POI Creates XLSX files incompletely or wrongly (the dimension tag in the XLSX XML reads only A1 after creation 而不是 A1 :500Z)

转载 作者:行者123 更新时间:2023-12-02 00:30:19 26 4
gpt4 key购买 nike

我通过 apache POI 库编写 XLSX 文件..(我已经尝试使用 POI 3.8 beta1 到 beta 4)。当我尝试通过 Excel 2007 打开 XLSX 文件时,它给我一个错误,提示工作表包含不可读的内容,然后 excel 询问我是否应该修复它。

我的问题是我的程序生成了一个 XLSX 文件,而另一个程序通过 POI 事件 API 读取它。当我通过事件 API 读取维度 XML 时,我发现它不是 A1:500Z(假设 excel 有 500 行和 26 列),而是只读取 A1。我已经看到,只有当工作表为空时,工作表的尺寸才为 A1,但在我的例子中,工作表有 500 行数据。所以XLSX写代码有问题导致维度设置错误。 (我认为这一定是 excel 抛出不可读内容错误的原因)。

我查看了提到此不可读内容错误的 POI 邮件列表,但无济于事。

XLSX 文件创建代码相当简单,所以我怀疑其中一定有什么错误(并且这种错误行为仅在要写入的工作表的数据超过 100 行的情况下出现)。

有人遇到过这样的问题吗?或者 POI 库本身有什么问题(他们的邮件列表确实显示不可读的内容错误)?

最佳答案

这里有同样的问题。如果您解压缩 xlsx 并查看文件“xl/worksheets/sheet1.xml”,您将始终阅读

<worksheet>
<dimension ref="A1"/>
<sheetViews>
<sheetView ...

无论添加了多少行和单元格。

我在 apache 的错误跟踪器上提交了一个错误:https://issues.apache.org/bugzilla/show_bug.cgi?id=53611

[编辑]
在 bugtracker 上,Ryan 发布了一个变通解决方案 https://issues.apache.org/bugzilla/show_bug.cgi?id=53611#c3

CTWorksheet ctSheet = wb.getXSSFWorkbook().getSheetAt(0).getCTWorksheet();
ctSheet.getDimension().setRef("A1:D47");

因此您必须跟踪您创建的列和行,并自己为每个工作表设置维度标签。

这是我的结果代码:

private void updateDimensionRef(Sheet sheet, int columnIndex, int rowNumber) {
((XSSFSheet) sheet).getCTWorksheet().getDimension()
.setRef("A1:" + CellReference.convertNumToColString(columnIndex) + rowNumber);
}

[编辑#2]

它已在 3.16-beta1 版本中修复。参见 Changelog (漏洞 #53611)。

关于excel-2007 - POI Creates XLSX files incompletely or wrongly (the dimension tag in the XLSX XML reads only A1 after creation 而不是 A1 :500Z),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7204217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com