JavaPOI操作数据库出现的问题总结(日期格式和数字格式的转换)

这段时间在用JavaPOI来操作Excel,遇到了一些问题困扰了我很久,终于都解决了,在这总结一下。

注意:本文中一后缀名是(.xlsx)的作为例子。

1.日期格式的转换。

日期格式的转换不管在哪里一直都是很大的问题,在Java中可以使用date类和sempleDateFormat还有(日历类)calendar来进行转化,而在Excel向数据库中传输时则有可以先判断单元格的数据类型然后在进行操作。

类型

CELL_TYPE_BLANK          空值(cell不为空)

CELL_TYPE_BOOLEAN     布尔

CELL_TYPE_ERROR          错误

CELL_TYPE_FORMULA      公式

CELL_TYPE_STRING          字符串

CELL_TYPE_NUMERIC       数值

这几个常量是判断单元格类型的,可以使用getCellType()此方法来获取单元格类型。

如下方法:

public String getValue(XSSFCell xssfCell){
        if(xssfCell.getCellType()==xssfCell.CELL_TYPE_BOOLEAN) {//这一步是判断类型
            return String.valueOf(xssfCell.getBooleanCellValue());//这一步是进行类型转化
        }else if(xssfCell.getCellType()==xssfCell.CELL_TYPE_NUMERIC) {
            
            DecimalFormat df = new DecimalFormat("0");
            return df.format(xssfCell.getNumericCellValue()); 
            
            //return String.valueOf((int)xssfCell.getNumericCellValue());
        }else {
            return String.valueOf(xssfCell.getStringCellValue());
        }
    }

xssfCell.getBooleanCellValue()此方法是将单元格中的内容转化成boolean类型

xssfCell.getNumericCellValue()此方法是将单元格中的内容转化成数值类型(整形默认被转化成double类型)

xssfCell.getStringCellValue()此方法是将单元格中的内容转化成String类型

接下来进入正题:关于日期格式的转换和单元格是空的问题

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

if(worktime==null||worktime.getCellType()==XSSFCell.CELL_TYPE_BLANK) {//这一步是判断单元格是不是空
                            jiuYeInfo.setWorktime("");
                        }else {
                            jiuYeInfo.setWorktime(sdf.format(worktime.getDateCellValue()));//这一步是将单元格内的内容转换成字符串
                        }

我们在获取单元格内容时会用到内容进行一些操作,若此内容是空的话,会报空指针异常,此时的解决办法是用(worktime==null||worktime.getCellType()==XSSFCell.CELL_TYPE_BLANK)这个方法判断是否为空,如果是空的则进行下一步操作。

第二个问题就是数值类型的转换,因为xssfCell.getNumericCellValue()使用此方法会将整形自动转换成浮点型,如果不进行转换,用浮点型进行操作,会使得数据变成科学计数法记成的数字,将其转换成字符串的话,会导致数据改变,所以这里进行数值类型的转换用

        DecimalFormat df = new DecimalFormat("0");
            return df.format(xssfCell.getNumericCellValue()); 
            这种转换一步到位,直接将整形转换成字符串。

你可能感兴趣的:(Java,工作总结)