Исключение Apache POI в Apache OFBiz

Я работаю в проекте. Его серверное приложение находится в офбизе. Я хочу читать, редактировать, обновлять и т. Д. Лист Excel. Но в обычной java-программе он работает. Я использую API-интерфейс apache poi. приложение.Тогда иногда некоторые исключения.

"
     [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.


person SIVAKUMAR.J    schedule 02.02.2011    source источник
comment
В сообщении об ошибке указано несоответствие типов данных. Вы используете одни и те же данные для своей WorkBook в автономном приложении и на рабочем месте?   -  person CoolBeans    schedule 02.02.2011
comment
coolBean спасибо за ваш комментарий, но я использую один и тот же файл Excel в обоих.   -  person SIVAKUMAR.J    schedule 02.02.2011
comment
Cannot get a text value from a numeric formula cell - попробуйте распечатать cell.getNumericCellValue   -  person JoseK    schedule 02.02.2011


Ответы (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();
person Iain Quickfall    schedule 14.06.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();
  }
}

Ознакомьтесь с кратким руководством и howto, чтобы начать работу с POI.

person Gagravarr    schedule 15.06.2011