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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top