Nicht bekommen kann einen NUMERISCHEN Wert aus einem STRING eine Zelle mit POI
Zum Lesen von Spalten aus der excel-Datei mit POI und java ich:
package main;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ReadExcel {
public static void main(String[] args) {
try {
InputStream fs = new FileInputStream("/.../ListProducts.xls");
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
Map<String, Integer> map = new HashMap<String,Integer>(); //Create map
HSSFRow row = sheet.getRow(0); //Get first row
//following is boilerplate from the java doc
short minColIx = row.getFirstCellNum(); //get the first column index for a row
short maxColIx = row.getLastCellNum(); //get the last column index for a row
for(short colIx=minColIx; colIx<maxColIx; colIx++) { //loop from first to last index
HSSFCell cell = row.getCell(colIx); //get the cell
map.put(cell.getStringCellValue(),cell.getColumnIndex()); //add the cell contents (name of column) and cell index to the map
}
List<ReportRow> listOfDataFromReport = new ArrayList<ReportRow>();
for(int x = 1; x<=sheet.getPhysicalNumberOfRows(); x++){
ReportRow rr = new ReportRow();
HSSFRow dataRow = sheet.getRow(x);
int idxForColumn1 = map.get("Id");
int idxForColumn2 = map.get("Name");
int idxForColumn3 = map.get("Price");
HSSFCell cell1 = dataRow.getCell(idxForColumn1);
HSSFCell cell2 = dataRow.getCell(idxForColumn2);
HSSFCell cell3 = dataRow.getCell(idxForColumn3);
rr.setColumn1(cell1.getNumericCellValue());
rr.setColumn2(cell2.getNumericCellValue());
rr.setColumn3(cell3.getNumericCellValue());
listOfDataFromReport.add(rr);
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
Ich feststellen, dass Variablen von setColumn1,setColumn2,setColumn3
Methoden sind double
.
Bekomme ich die folgende Fehlermeldung, wenn ich versuche, führen Sie das Programm, um Daten zu Lesen:
Exception in thread "main" java.lang.IllegalStateException: Cannot get a NUMERIC value from a STRING cell
at org.apache.poi.hssf.usermodel.HSSFCell.typeMismatch(HSSFCell.java:654)
at org.apache.poi.hssf.usermodel.HSSFCell.getNumericCellValue(HSSFCell.java:679)
Jeden Vorschlag bitte, ich habe alle Zellen in der excel-Datei mit numerischem Typ...
- Können Sie Ihre Eingabe-excel-Datei. Aus den Namen der Spalten,
Name
,Id
es sieht, dass diese vonnumeric type
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie tun möchten, verwenden Sie die DataFormatter Klasse. Sie passieren das eine Zelle, und er tut sein bestes, um Sie wieder einen string, was Excel zeigen Sie für diese Zelle. Wenn Sie übergeben einen string, Zelle, du bekommst einen string zurück. Wenn es eine numerische Zelle mit Formatierung-Regeln angewendet, wird es formatieren Sie die Zahl der auf Ihnen beruhenden und geben Sie die Zeichenfolge zurück.
Für Ihren Fall, Wenn Sie Fragen DataFormatter zu formatieren die Zellen, es gibt dir einen string zurück mit dem Doppel-string in es.
Versuchen,
weitere Referenz können Sie einen Blick auf diese links, ich denke, es wird dir helfen.
http://massapi.com/class/da/DataFormatter.html
Wenn Sie sicher sind, dass 3 Werte numerisch sind, können Sie ändern Sie die Arten, bevor Sie Lesen, wie diese: