0

我在一个项目中工作。它的服务器端应用程序在 ofbiz 中。我想阅读、编辑、更新等 excel 表。但在普通的 java 程序中它的工作。我使用 apache poi API。但是当放入 ofbiz 然后运行应用程序。然后有时会出现一些异常。以下是

"
     [java] java.lang.IllegalStateException: Cannot get a text value from a nume
ric formula cell
     [java]     at org.apache.poi.hssf.usermodel.HSSFCell.typeMismatch(HSSFCell.
java:637)
     [java]     at org.apache.poi.hssf.usermodel.HSSFCell.checkFormulaCachedValu
eType(HSSFCell.java:642)
     [java]     at org.apache.poi.hssf.usermodel.HSSFCell.getRichStringCellValue
(HSSFCell.java:719)
     [java]
     [java]     at org.apache.poi.hssf.usermodel.HSSFCell.getStringCellValue(HSS
FCell.java:697)
     [java]     at org.ofbiz.productionmgntSystem.setTargetPlan.getRequiredData(
setTargetPlan.java:764)
     [java]     *****
     [java]     at org.ofbiz.productionmgntSystem.setTargetPlan.setTask(setTarge
tPlan.java:201)
     [java]     at org.ofbiz.productionmgntSystem.ThreadProcess.run(ThreadProces
s.java:113)

"

这里我在普通的 java 和 ofbiz 中使用相同的 apache poi API。

4

2 回答 2

2

读取整数事务号时,我遇到了同样的问题。我想到解决这个问题的自然方法是使用:

if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC) {
   String.valueOf(cell.getNumericCellValue());
}

这不起作用,因为 12345 转换为 12345.0

获得与 Excel 文档中显示的字符串值完全相同的解决方法是:

cell.setCellType(Cell.CELL_TYPE_STRING);
String cellValue=cell.getStringCellValue();
于 2011-06-14T15:36:08.653 回答
0

Excel 通常会将仅包含数字的单元格存储为数字单元格,而不是字符串单元格。您可能认为它不是数字单元格,但它是...

你可能想要这样的东西:

DataFormatter formatter = new DataFormatter(Locale.US);

....

for(Cell cell : row) {
  String val;
  if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC) {
     // Format the number to look like it does in excel
     val = formatter.formatCellValue(cell);
  }
  if(cell.getCellType()==Cell.CELL_TYPE_STRING) {
     // Just get the string as-is
     val = cell.getRichStringCellValue().getString();
  }
}

查看 POI快速指南以及如何开始使用 POI。

于 2011-06-15T09:26:43.127 回答