`
x10232
  • 浏览: 57353 次
  • 来自: 北京
社区版块
存档分类
最新评论

POI读取Excel时数据类型转换的问题

    博客分类:
  • Java
 
阅读更多
1. 数值类型处理

       通过POI取出的数值默认都是double,即使excel单元格中存的是1,取出来的值也是1.0,这就造成了一些问题,如果数据库字段是int,那么就会wrong data type,所以需要对数值类型处理。
    Cell cell = null;// 单元格  
    Object inputValue = null;// 单元格值  
    if(!isEmpty(cell) && cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {  
        long longVal = Math.round(cell.getNumericCellValue());  
        if(Double.parseDouble(longVal + ".0") == doubleVal)  
            inputValue = longVal;  
        else  
            inputValue = doubleVal;
    }  

这么处理后,单元格中的小数没有变化,如果是整数,也会取到整数。

注:由于电子表格只能支持15位数值的显示,当数值大于15位时会造成数据丢失,所以对于处理大于15位的学号身份证号等数值信息,建议以text格式存储,在读取的时候:
Long id=new Long(cell.toSting());




       2. 日期类型处理

       很遗憾,POI对单元格日期处理很弱,没有针对的类型,日期类型取出来的也是一个double值,所以同样作为数值类型。


    Cell cell = null;// 单元格  
    Object inputValue = null;// 单元格值  
    if(!isEmpty(cell) && cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {  
        if(DateUtil.isCellDateFormatted(c))// 判断单元格是否属于日期格式  
            inputValue = cell.getDateCellValue();//java.util.Date类型  
    }  


转换成Timestamp格式:
Timestamp time=new Timestamp(inputValue.getTime());


       可以判断得到的Date是日期时间、日期还是时间,可以通过cell.getCellStyle().getDataFormat()来判断,这个返回值没有一个常量值来对应,我本机是excel2013,测试结果是日期时间(yyyy-MM-dd HH:mm:ss) - 22,日期(yyyy-MM-dd) - 14,时间(HH:mm:ss) - 21,年月(yyyy-MM) - 17,时分(HH:mm) - 20,月日(MM-dd) - 58,有了这个,可以根据数据库字段类型,处理之后再入库,相当不方便。

       另外,如果单元格数据格式是自定义的日期格式,那么通过DateUtil.isCellDateFormatted(cell)判断不出来,而且该单元格还是一个数值单元格,返回一个double值,这里比较2。针对这种方式,有两种解决方案,第一种,重写DateUtil.isCellDateFormatted(cell)方法,开源的都有源码;第二种,cell.getCellStyle().getDataFormatString()来判断,这个方法会返回格式字符串,通过这个字符串去匹配,再处理。

       附单元格数据类型:


|Cell.CELL_TYPE_NUMERIC 数值类型 cell.getNumericCellValue()||或cell.getDateCellValue()|
|Cell.CELL_TYPE_STRING 字符串类型 cell.getStringCellValue()||或cell.toString()|
|Cell.CELL_TYPE_BOOLEAN 布尔类型 cell.getBooleanCellValue()|
|Cell.CELL_TYPE_FORMULA 表达式类型 cell.getCellFormula()|
|Cell.CELL_TYPE_ERROR 异常类型||不知道何时算异常 cell.getErrorCellValue()|
|Cell.CELL_TYPE_BLANK 空,不知道何时算空 空就不要取值了吧|
分享到:
评论

相关推荐

    POI读取Excel带格式数据

    当我们需要从大量的Excel数据中提取信息时,手动操作显然效率低下,这时就轮到Apache POI库大显身手了。Apache POI是一个用于读写Microsoft Office格式档案的开源Java库,特别适用于处理Excel文件。本篇将详细讲解...

    java POI读取excel文件数据

    在这个场景中,我们将详细探讨如何使用Java POI读取Excel文件中的数据,包括获取总行数、列数、单元格内容、合并单元格、行高、列宽以及图片等信息。 首先,确保在项目中已经引入了Apache POI的依赖库。如果你使用...

    POI生成Excel POI操作Excel POI读取Excel POI类库

    2. **数据类型**:Excel中的数据类型包括字符串、数字、日期等,需要正确处理这些类型,防止数据丢失或转换错误。 3. **样式和格式**:POI允许设置单元格的样式,如字体、颜色、边框、对齐方式等,以增强Excel的...

    poi excel转换成bean

    总之,Apache POI 提供了强大的功能,使得我们可以轻松地将Excel数据转换为Java Bean,便于进一步的处理和利用。无论是简单的数据映射还是复杂的对象结构,都可以通过熟练运用POI库来实现。这个过程在数据导入、分析...

    利用POI解析excel并存入数据库demo

    在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效地存入 MySQL 数据库。 首先,要开始使用 POI,你需要在你的项目中引入相应的依赖。如果你使用的是 Maven...

    POI读取EXCEL教程

    HSSF与POIFS(POI OLE 2 Property Set Facility)紧密关联,POIFS负责处理文件的存储结构,而HSSF则专注于Excel数据的逻辑表示。 HSSF API分为两种模式:usermodel和eventusermodel。 1. **Usermodel**:提供了一种...

    java poi 读取excel 2007

    以上就是使用Java POI读取Excel 2007文件并将内容存储到List的基本过程。这个过程可以根据实际需求进行调整,比如处理表头、忽略空行、处理特殊格式的单元格等。在处理大数据量时,还需要考虑性能优化,例如使用迭代...

    Java用poi读取excel文件

    然后,我们可以使用 `FileInputStream` 读取 Excel 文件,并使用 `POIFSFileSystem` 将其转换为 POI 可以识别的格式: ```java InputStream input = new FileInputStream("D:\\test.xls"); POIFSFileSystem fs = ...

    ssm通过POI技术把excel数据导入mysql

    在本项目中,我们将探讨如何利用POI技术和SSM框架将Excel数据有效地导入MySQL数据库。 首先,我们需要了解Apache POI库。POI是一个开源的Java API,它允许我们读取、创建、修改Excel文件。通过使用POI,我们可以...

    POI导入Excel表格数据小例子

    - 单元格类型转换时需要处理特殊情况,比如日期格式转换。 - 错误处理非常重要,确保程序健壮性和用户体验。 #### 五、扩展思考 - 如何优化大文件的数据导入效率? - 是否可以实现多线程并行处理来提高性能? - ...

    poi读取Excel2007文件

    6. serializer.jar - 这是XSLT处理器的组件,可能在将Excel数据转换为XML或其他格式时使用。 7. commons-beanutils.jar - Apache Commons BeanUtils库提供了方便的Java Bean操作,可能在处理Excel数据映射到Java...

    POI读取Excel大文件-输出cvs文件.rar

    - **数据类型转换**:根据需要,可能需要将Excel中的数字、日期、布尔值等转换为相应的CSV格式。 - **错误处理**:在读取和转换过程中,应捕获并处理可能出现的异常,如文件不存在、内存不足等。 总之,Apache POI...

    poi导入excel表需要的jar包

    此外,还可以利用`CellType`枚举值来确定单元格的数据类型,以避免类型转换错误。 总而言之,Apache POI为Java开发者提供了一套强大的工具,使得在不使用Excel的情况下也能方便地操作Excel文件。正确导入并使用相应...

    Java使用POI读取Excel

    总结一下,使用Java和Apache POI读取Excel文件主要包括以下几个步骤: 1. 引入Apache POI依赖。 2. 创建`FileInputStream`对象打开Excel文件。 3. 使用`XSSFWorkbook`读取工作簿。 4. 遍历工作簿中的工作表和行。 5....

    基于poi的excel导入导出封装

    Apache POI提供了丰富的异常处理机制,可以帮助你在遇到问题时进行调试和修复。 总结,Apache POI提供了强大的Excel操作功能,通过封装,我们可以轻松地实现Excel的导入和导出。这在数据处理、报表生成、数据交换等...

    java的poi技术读取Excel数据到MySQL

    接下来,我们创建一个Java类,用POI读取Excel文件。首先打开文件并创建一个Workbook对象,然后获取第一个Sheet,接着遍历每个Row和Cell以获取数据: ```java import org.apache.poi.ss.usermodel.*; import org....

    Java读取大数据量Excel的方法(POI)

    5. **处理数据类型**:Cell中的数据可以是字符串、数字、日期等。使用`cell.getCellType()`检查类型,然后使用对应的转换方法: ```java switch (cell.getCellType()) { case STRING: String value = cell....

    poi操作excel的Demo

    POI提供了多种方法来获取Cell的内容,包括直接获取值或者根据数据类型进行转换。 5. **修改Excel文件**: 对于已存在的Excel文件,你可以通过打开Workbook,找到目标Sheet和Row,然后修改或替换Cell的值。完成后,...

    POI操作Excel完美生成水印

    在Java编程领域,...总的来说,通过Apache POI库,开发者可以方便地对Excel文件进行各种操作,包括添加水印,从而提高文档的安全性和专业性。这个过程涉及到Java图形处理、Excel文件结构理解和POI API的熟练运用。

    java poi读取excel表格数据专用jar包 包括(dom4j和xmlbeans包)

    5. **读取Excel数据**:使用POI读取Excel数据的基本步骤包括: - 加载工作簿:创建HSSFWorkbook对象(.xls)或XSSFWorkbook对象(.xlsx)。 - 访问工作表:通过工作簿对象获取Sheet对象,代表Excel中的工作表。 -...

Global site tag (gtag.js) - Google Analytics