写了一个关于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(); }
------解决方案--------------------------------------------------------
写死有时也会出现一列有两种数据类型的情况.