Apache Poi Eccezione in Apache ofbiz
-
28-10-2019 - |
Domanda
Sto lavorando in un progetto. L'applicazione lato server è in Ofbiz. Voglio leggere, modificare, aggiornare, ecc. Il foglio di Excel. Ma nel normale programma Java è il suo funzionamento. IM Usando Apache Poi Api.ma quando metti in Ofbiz, quindi eseguire il applicazione. Quindi a volte qualche eccezione. Le seguenti sono
"
[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)
"
Qui sto usando lo stesso Apache POI API in entrambi i normali Java e Ofbiz.
Soluzione
Ho avuto lo stesso problema quando venivano letti numeri di transazione interi. Il modo naturale che mi è venuto in mente di risolvere questo era usare:
if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC) {
String.valueOf(cell.getNumericCellValue());
}
Questo non funziona poiché 12345 viene convertito in 12345.0
La soluzione alternativa per ottenere il valore della stringa esattamente come appare nel documento Excel è fare:
cell.setCellType(Cell.CELL_TYPE_STRING);
String cellValue=cell.getStringCellValue();
Altri suggerimenti
Excel immagazzinerà spesso celle contenenti solo numeri come celle numeriche, piuttosto che celle a stringa. Potresti pensare che non sia una cella numerica, ma è ...
Probabilmente vuoi qualcosa di simile:
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();
}
}
Dai un'occhiata al POI guida veloce e come Per iniziare con l'uso di POI.