gpt4 book ai didi

java - Apache POI 在空电子表格中看到列?

转载 作者:行者123 更新时间:2023-11-29 05:27:54 25 4
gpt4 key购买 nike

我有一个空的电子表格,但是当我使用 Apache POI(版本 3.10)访问它时,它说它有 1024 列和 20 个物理列。
我真的删除了所有单元格,只剩下一些格式,但没有内容。
如果我使用 LibreOffice Calc(版本 4.1.3.2)删除一些列,列数只会增加!怎么回事?
是否有可靠的方法来获取实际的列数(或一行中的单元格)?

import java.net.URL;
import org.apache.poi.ss.usermodel.*;

public class Test {
public static void main(final String... args) throws Exception {
final URL url = new URL("http://aditsu.net/empty.xlsx");
final Workbook w = WorkbookFactory.create(url.openStream());
final Row r = w.getSheetAt(0).getRow(0);
System.out.println(r.getLastCellNum());
System.out.println(r.getPhysicalNumberOfCells());
}
}

最佳答案

经过更多调查,我想我明白发生了什么。

首先,POI 中的一些术语:有些单元格实际上根本不存在于电子表格中 - 这些单元格称为缺失,或未定义/未定义.然后有一些已定义但没有值的单元格 - 那些称为空白单元格。这两种类型的单元格在电子表格程序中都显示为空,并且无法在视觉上加以区分。

我的电子表格有一些空白单元格,LibreOffice 添加到行的末尾(可能是错误)。当我删除列时,LibreOffice 似乎将后续单元格(包括空白单元格)向左移动,并在末尾添加更多空白单元格(最多 1024 个)。

现在是关键部分:getLastCellNum()getPhysicalNumberOfCells() 都不会忽略空白单元格。 getLastCellNum() 给出了最后一个defined 单元格,getPhysicalNumberOfCells() 给出了defined 单元格的数量,两者都包括空白单元格。似乎没有任何方法可以跳过空白单元格。 getPhysicalNumberOfCells() 的 javadoc 有点误导 - “如果只有 0、4、5 列有值,那么就会有 3”,但它实际上也在计算空白单元格,这些单元格实际上没有值.

所以我找到的唯一解决方案是遍历单元格并检查它们是否为空白。

旁注:getLastRowNum()getFirstCellNum() 是从 0 开始的,但是 getLastCellNum() 是从 1 开始的,wtf?

关于java - Apache POI 在空电子表格中看到列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22070763/

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