gpt4 book ai didi

java - Apache POI 的 getCachedFormulaResultType() 返回错误类型

转载 作者:行者123 更新时间:2023-12-01 23:22:03 24 4
gpt4 key购买 nike

我正在阅读 Excel 工作表。最初(直到 rowid 30)我得到了公式单元格的正确 (CELL_TYPE_STRING) 结果类型,但从行 id 31 开始,我收到了错误的 (CELL_TYPE_NUMERIC) 结果类型。

请参阅下面的日志:我使用 ==== 作为分隔符来分隔每行的日志。第 1 列是焦点,对于 rowID=30,我得到 type=String,而对于 rowId=31,我得到 type=Numeric,但每行的第 1 列是字符串类型,因此我缺少如何获取字符串值.

请查看日志对应行的 Excel 工作表内容。

        switch (cell.getCellType()) {

case Cell.CELL_TYPE_FORMULA:
cellWrapper.setCellValueFarmula(true);
switch (cell.getCachedFormulaResultType()) {
case Cell.CELL_TYPE_NUMERIC:
cellValue = String.valueOf(cell.getNumericCellValue());
logged.append("CELL_TYPE_FORMULA->CELL_TYPE_NUMERIC");
break;
case Cell.CELL_TYPE_STRING:
cellValue = "" + cell.getRichStringCellValue();
logged.append("CELL_TYPE_FORMULA->CELL_TYPE_STRING");
break;
case Cell.CELL_TYPE_BOOLEAN:
cellValue = "" + cell.getBooleanCellValue();
logged.append("CELL_TYPE_FORMULA->CELL_TYPE_BOOLEAN");
break;
case Cell.CELL_TYPE_ERROR:
cellValue = "error! ";
logged.append("CELL_TYPE_FORMULA->CELL_TYPE_ERROR");
break;

default:
cellValue = null;
logged.append("case not captured" + " type fetched = " + cell.getCellType());
break;
}
break;
case Cell.CELL_TYPE_BLANK:
logged.append("CELL_TYPE_BLANK");
cellValue = null;
break;
case Cell.CELL_TYPE_ERROR:
cellValue = "error!";
logged.append("CELL_TYPE_ERROR");
break;
... some for cases below

Excel 内容

   Col1                                                    Col2                                   Col3                 Col4
[ACTIVE] - 21 - 1A - CALDRA - 305 . {Chitra Subramaniam - 9538924280}, {deepakag@yahoo.com} 12 Rs. 1,000
[ACTIVE] - 22 - 1A - CALDRA - 306 . {Parasad Parigi - 9538924280}, {deepakag@yahoo.com} 25 Rs. 1,000
[SEALED] - 23 - 1A - CALDRA - 401 . {Vivek - 9538924280}, {deepakag@yahoo.com} <empty cell> Rs. 1,075

日志

==================================================================================================
Cell @ row=30col=1 type = CELL_TYPE_FORMULA->CELL_TYPE_STRING Value=[ACTIVE] - 21 - 1A - CALDRA - 305 .
Cell @ row=30col=2 type = CELL_TYPE_FORMULA->CELL_TYPE_STRING Value= {Chitra Subramaniam - 9538924280}, {deepakag@yahoo.com}
Cell @ row=30col=3 type = CELL_TYPE_NUMERIC Value=12.0
Cell @ row=30col=4 type = CELL_TYPE_STRING Value=Rs. 1,000
==================================================================================================
Cell @ row=31col=1 type = CELL_TYPE_FORMULA->CELL_TYPE_NUMERIC Value=0.0
Cell @ row=31col=2 type = CELL_TYPE_FORMULA->CELL_TYPE_STRING Value= {Parasad Parigi - 9538924280}, {deepakag@yahoo.com}
Cell @ row=31col=3 type = CELL_TYPE_NUMERIC Value=25.0
Cell @ row=31col=4 type = CELL_TYPE_STRING Value=Rs. 1,000
==================================================================================================
Cell @ row=32col=1 type = CELL_TYPE_FORMULA->CELL_TYPE_NUMERIC Value=0.0
Cell @ row=32col=2 type = CELL_TYPE_FORMULA->CELL_TYPE_STRING Value= {Vivek - 9538924280}, {deepakag@yahoo.com}
Cell @ row=32col=3 type = CELL_TYPE_BLANK Value=null
Cell @ row=32col=4 type = CELL_TYPE_STRING Value=Rs. 1,075
==================================================================================================

那么如何检索单元格结果值,即使该值是数字?是否有一种通用方法可以以字符串形式给出结果值,而不管单元格是什么类型?

最佳答案

Excel 中的单元格可以有多种不同的类型。 POI 会返回 Excel 存储时的单元格值,这很可能不是 Excel 的显示方式。 (Excel 在这方面可能有点神秘!)。

如果您希望 POI 尝试将单元格格式设置为类似于 Excel 中的格式,无论类型如何,那么您要查找的类是 DataFormatter 。您的代码将类似于:

 DataFormatter fmt = new DataFormatter();
for (Row r : sheet) {
for (Cell c : r) {
CellReference cr = new CellRefence(c);
System.out.println("Cell " + cr.formatAsString() + " is " +
fmt.formatCellValue(c) );
}
}

关于java - Apache POI 的 getCachedFormulaResultType() 返回错误类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20489371/

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