Apache POI исключение в Apache OFBiz - PullRequest
0 голосов
/ 02 февраля 2011

Я работаю в проекте. Приложение на стороне сервера находится в ofbiz. Я хочу читать, редактировать, обновлять и т. Д. Лист Excel. Но в обычной java-программе он работает. Я использую API Apache Poi. Но когда ставится в 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)

"

Здесь я использую один и тот же API-интерфейс apache poi как в обычной java, так и в ofbiz.

Ответы [ 2 ]

2 голосов
/ 14 июня 2011

У меня была такая же проблема, когда читались целые номера транзакций. Мне пришло в голову, что для решения этой проблемы мне понадобилось:

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();
0 голосов
/ 15 июня 2011

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 и howto , чтобы начать работу с POI.

...