gpt4 book ai didi

java - Apache POI字符串公式错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:18:33 24 4
gpt4 key购买 nike

我使用 Apache POI 创建带有字符串公式的 Excel 文件并获得#VALUE!结果文件错误。

源代码是

public static void main(String[] args) throws IOException {
Workbook wb = new HSSFWorkbook();
FormulaEvaluator ev = wb.getCreationHelper().createFormulaEvaluator();
Sheet ws = wb.createSheet();
Row row = ws.createRow(0);
Cell cell;
cell = row.createCell(0);
cell.setCellValue("abc");

cell = row.createCell(1);
printCellInfo(row.getCell(1),"before formula");
cell.setCellFormula("IF(A1<>\"\",MID(A1,1,2),\" \")");

printCellInfo(row.getCell(1), "after formula");
ev.evaluateAll();
printCellInfo(row.getCell(1), "after recalc");

OutputStream os = new FileOutputStream("xx.xls");
wb.write(os);

}

(printCellInfo 是我下面讲的信息方法)错误单元格是 B1。 Excel 显示“单元格中使用的值的数据类型不正确”。但是,如果打开此单元格进行编辑(使用 F2)并按 Enter - 公式计算正确!!!

现在关于细胞信息。帮助方法是

static void printCellInfo(Cell cell, String infoText) {
System.out.println("Cell "+CellReference.convertNumToColString(cell.getColumnIndex())+cell.getRowIndex()+" "+infoText);
int ct = cell.getCellType();
System.out.println(" Cell type "+ct);
if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
ct = cell.getCachedFormulaResultType();
System.out.println(" Cached type "+ct);
}
switch (ct) {
case Cell.CELL_TYPE_NUMERIC:
System.out.println(" Number <"+cell.getNumericCellValue()+">");
break;
case Cell.CELL_TYPE_STRING:
System.out.println(" String <"+cell.getStringCellValue()+">");
}
System.out.println("============================");
}

主要执行的输出是

Cell B0 before formula
Cell type 3
============================
Cell B0 after formula
Cell type 2
Cached type 0
Number <0.0>
============================
Cell B0 after recalc
Cell type 2
Cached type 1
String <ab>
============================

所以 B0 首先是 BLANK,在插入公式后是 NUMBER。为什么 POI 这样做,也许问题从这里开始?不幸的是,重新计算后 POI 中的正确数据类型在 Excel 中并不正确。

顺便说一句,根据 POI IF(A1<>"","A","B") 或 MID(A1,1,2) 计算的公式是正确的。而B1=MID(A1,1,2) 和C1=IF(A1<>"",B1,""), 由POI 计算出的集合是正确的。

有什么想法吗?我找到了唯一的话题https://openclassrooms.com/forum/sujet/apache-poi-formula-valeur在互联网上,有一些想法,但没有可行的解决方案...

cell = row.getCell(1);
cell.setCellValue(cell.getStringCellValue());

也没有帮助。

最佳答案

我在我的机器上试过你的代码,它工作正常。

我在 Excel for mac 2013 上使用 beta POI 3.13

你的 excel 表也工作正常(在你在聊天中把它给我之后)

所以问题是您的 POI 版本和 Excel 2010 库之间的兼容性不正确。

这也是你的工作表。

enter image description here

关于java - Apache POI字符串公式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31743851/

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