gpt4 book ai didi

java - 如何处理 POI 中的空数字单元格

转载 作者:行者123 更新时间:2023-12-02 11:11:56 24 4
gpt4 key购买 nike

POI 创建数字单元格(实际上它是空的)是否有任何特殊原因?发生的情况是,当我到达该单元格时,我显然收到运行时错误,因为我无法获取字符串值(毕竟它是一个数字单元格),而且我也无法获取数值(不能从空字符串中获取一个数字)所以我的两个问题是:

  1. POI 是如何到达那里的?
  2. 有什么方法可以处理这种情况,而无需显式转到我的 Excel 文件吗?

更新一:读取/解析我的 Excel 文件后,POI 会为此特定单元格生成以下 XML:

  <x:c r="AA2" t="n">
<x:v/>
</x:c>

我的方法是这样的:

    final FileInputStream inputStream = new FileInputStream(new File("PATH/TO/FILE.xml"));
final XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
final XSSFSheet sheet = workbook.getSheet("SHEET_NAME");

final int columnCount = sheet.getRow(0).getLastCellNum();
for (int rowNumber = 0; rowNumber <= sheet.getLastRowNum(); rowNumber++)
{
final XSSFRow row = sheet.getRow(rowNumber);
for (int column = 0; column < columnCount; column++)
{
// By now my cell would throw an exception if I attempt cell.getStringCellValue() or cell.getNumericCellValue() as cell.getCellType() returns "0" / NUMERIC
final XSSFCell cell = row.getCell(column);
...
}
}

我正在考虑添加一个额外的验证来使用 getRawValue() 方法来确定单元格是否为空,但不确定是否有更好的方法来处理这个问题,因为它显然是错误解析的。

更新二我已经能够通过将其添加为单元测试的一部分来重现此场景(但我仍然不明白为什么 POI 会落入此场景):

    final XLSXSheetConverterImpl xlsxSheetConverter = new XLSXSheetConverterImpl();
xlsxSheetConverter.setSheetName(SHEET_NAME);
xlsxSheetConverter.setFilePrefix(FILE_PREFIX);

XSSFWorkbook workbook = new XSSFWorkbook();
final XSSFSheet sheet = workbook.createSheet(SHEET_NAME);

final XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
final CTCellImpl ctCell = (CTCellImpl) cell.getCTCell();
ctCell.setT(STCellType.N);
ctCell.setV("");

提前致谢!

最佳答案

这是旧 POI 版本中的一个已知错误,请参阅:https://bz.apache.org/bugzilla/show_bug.cgi?id=56702

从3.11版本开始已修复

谢谢大家的帮助!!

关于java - 如何处理 POI 中的空数字单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50557608/

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