当前位置: 代码迷 >> Java相关 >> Poi判断单元格的数据类型有关问题
  详细解决方案

Poi判断单元格的数据类型有关问题

热度:7398   发布时间:2013-02-25 21:48:43.0
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()) {
……
  相关解决方案