Poi判断单元格的数据类型问题
写了一个关于Excel数据写入数据库的程序,下面是把读Excel文件的相关代码:public List<SAV_TMP> readSAV_TMP(File xlsFile){
List<SAV_TMP> list=new ArrayList<SAV_TMP>();
try{
FileInputStream fln=new FileInputStream(xlsFile);//创建一个文件流
HSSFWorkbook readWorkBook=new HSSFWorkbook(fln);//获取工作簿
HSSFSheet readSheet=readWorkBook.getSheet("Sheet1");//获取第一张工作表,Sheet1表名
HSSFRow readRow=readSheet.getRow(0);//数据起始行
HSSFCell readCell=readRow.getCell((short)0);//单元格
System.out.println("第一个单元格是:"+readCell.getStringCellValue());
int count=readSheet.getPhysicalNumberOfRows();//获得工作表中一共有多少条数据
for(int i=2;i<count;i++){//Excel中的第三行起是要读入的数据
HSSFRow readRow1=readSheet.getRow(i);
String acno=readCell.getStringCellValue();
String rctl=readCell.getStringCellValue();
String cunm=readCell.getStringCellValue();
double acbl=readCell.getNumericCellValue();
double rjye=readCell.getNumericCellValue();
现在报出异常:
java.lang.NumberFormatException : You cannot get a numeric value from a String based cell
应该就是这两句的问题
double acbl=readCell.getNumericCellValue();
double rjye=readCell.getNumericCellValue();
我的数据库中acbl和rjye就是Double类型的,Excel表中是数值型的
我不清楚怎样进行类型转换,向大家请教!!!谢谢
------解决方案-------------------- for(int i=2;i<count;i++){//Excel中的第三行起是要读入的数据
HSSFRow readRow1=readSheet.getRow(i);
String acno=readCell.getStringCellValue();
String rctl=readCell.getStringCellValue();
String cunm=readCell.getStringCellValue();
double acbl=readCell.getNumericCellValue();
double rjye=readCell.getNumericCellValue();
你难道没有发现你都操作的是readCell么?readCell的值肯定只能是一种类型。
------解决方案-------------------- 得判断单元格格式类型,这是我原来写的,参考一下:
Java code
private Object getCellData(Cell cell, FormulaEvaluator formula) {
if(cell == null) {
return null;
}
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
return cell.getRichStringCellValue().getString();
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
return cell.getDateCellValue();
} else {
return cell.getNumericCellValue();
}
case Cell.CELL_TYPE_BOOLEAN:
return cell.getBooleanCellValue();
case Cell.CELL_TYPE_FORMULA:
return formula.evaluate(cell).getNumberValue();
default:
return null;
}
}
------解决方案--------------------
首先我们要获取单元格。如果你对excel中的数据非常确定。为了简单你可以写死。如下面: Java code
for(int i=2;i<rowCount;i++){//Excel中的第三行起是要读入的数据
HSSFRow readRowi=readSheet.getRow(i);
HSSFCell cell=readRowi.getCell((short)0);
String acno=readCell.getStringCellValue();
cell=readRowi.getCell((short)1);
String rctl=readCell.getStringCellValue();
cell=readRowi.getCell((short)2);
String cunm=readCell.getStringCellValue();
cell=readRowi.getCell((short)3);
double acbl=readCell.getNumericCellValue();
cell=readRowi.getCell((short)4);
double rjye=readCell.getNumericCellValue();
}
------解决方案-------------------- 写死有时也会出现一列有两种数据类型的情况. 探讨 得判断单元格格式类型,这是我原来写的,参考一下: Java code private Object getCellData(Cell cell, FormulaEvaluator formula) { if(cell == null) { return null; } switch (cell.getCellType()) { ……