poi导入excel到数据库:
public static String getCellValue(HSSFCell cell){
String value = null;
//检查列类型
switch(cell.getCellType()){
case HSSFCell.CELL_TYPE_STRING://字符串
value = cell.getRichStringCellValue().getString();
break;
case HSSFCell.CELL_TYPE_NUMERIC://数字
value = new Double(cell.getNumericCellValue()).toString();
break;
case HSSFCell.CELL_TYPE_BLANK:
value = "";
break;
case HSSFCell.CELL_TYPE_FORMULA:
value = String.valueOf(cell.getCellFormula());
break;
case HSSFCell.CELL_TYPE_BOOLEAN://boolean型值
value = String.valueOf(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_ERROR:
value = String.valueOf(cell.getErrorCellValue());
break;
default:
break;
}
return value;
}
这是我的判断单元格类型和转换。
假如导入的excel文件中有个字段:分公司为1010100,在excel中的单元格是数值类型。poi取出后变为1010100.0,而数据库中的是char类型,导入就会报错。因为数据库还有一个字段为money:是double类型,所以不能再getCellValue()方法中DecimalFormat数值类型的数,也不能在excel文件中将分公司1010100定义为文本,这不友好。请教高手这个一般怎么解决的?

解决方案 »

  1.   

    一点建议:从Excel读出时,能用字符表示的尽可能表示成字符,这样写入数据库时方便
      

  2.   

    如果该字段不需要进行计算的话,
    你可以将EXCEL中那列的值的格式设置为文本,数据库中设置字段类型为string,读取的时候利用getStringCellValue()来读就行了
      

  3.   

    这个我也知道,但用户写excel文件时,不会把分公司字段设为文本的。读出时就是数值型了,变为1010100.0了,在插入数据库前进行手动处理除掉小数点感觉不好,不知道有没有好的解决方法。
      

  4.   

    2楼的哥们,最关键的就是excel中的那列的值的格式使用户设置的,一般不会设为文本的,图方便都只会直接写,就是数值格式了。
      

  5.   

    我用了一个很原始也很笨的办法来解决,那就是判断如果是数值类型的,就先转换成字符串类型,再把后面的.0给截取掉(这里的.0必须是以.0结尾的才能截取)case HSSFCell.CELL_TYPE_NUMERIC:
    str = String.valueOf(cell.getNumericCellValue());
    if(str.endsWith(".0")) {
    str = "'" + str.substring(0, str.lastIndexOf(".")) + "'";
    }
      

  6.   

    导入的数据需要规范,用户自定义格式的数据导入时会存在偏差。现在用cell.toString()即可取到值。