Java操作百万数据量Excel导入导出工具类(一直维护中)

版权声明:本文为博主原创文章,可允许转载,但注明出处。 https://blog.csdn.net/JavaWebRookie/article/details/80843653

更新日志:(如果有更好的优化方案或者更高级的工具类:欢迎评论或者私信)
* 1.response.reset();注释掉reset,否在会出现跨域错误。

* 2.可导出多个单元poi官方建议大数据量解决方案:SXSSFWorkbook。

* 3.自定义下拉列表:对每个单元格自定义下拉列表。

* 4.数据遍历方式换成数组(效率较高)、可提供模板下载、每个表格的大标题[2018-09-14]

* 5.自定义列宽:对每个单元格自定义列宽[2018-09-18]

* 6.自定义样式:对每个单元格自定义样式[2018-10-22]-[2018-10-25修复]

* 7.自定义单元格合并:对每个单元格合并[2018-10-22]

* 8.固定表头[2018-10-23、自定义样式:单元格自定义某一列或者某一行样式[2018-10-30]

* 9.解决 SimpleDateFormat 与 DecimalFormat 线程安全问题[2018-11-07]。 localhost01 博友 2018-11-07

* 10.版本3.0开始支持对象编程(之前都是直接调用函数、现支持先写入对象再调用)。[2018-12-07]

* 11.速度调优、修复100万数据导出内存溢出bug(临时方案)、解决本地测试报servlet找不到问题。[2019-01-31]

* 12.导入日期格式和数字小数点位数可自定义【看教程】。[2019-02-01-14]

 

实现功能:

    1、导入Excel文件,支持配置时间、小数点类型(支持单/多sheet)              
    2、浏览器导出Excel文件、模板文件(支持单/多sheet)           
    3、指定路径生成Excel文件(支持单/多sheet)           
    4、自定义样式,行、列、某个单元格(字体大小、字体颜色、左右对齐、居中。支持单/多sheet)           
    5、自定义固定表头(支持单/多sheet)            
    6、自定义下拉列表值(支持单/多sheet)           
    7、自定义合并单元格、自定义列宽、自定义大标题(支持单/多sheet)   

亲自测试:WPS、office 07、08、09、10、11、12、16 能正常打开。其他版本待测试!

注:POI SXSSFWorkbook 最高限制1048576行,16384列

----------------------------------------------------------------------------------------------------------------------

作者序言:把简单的事情做好、才做好更复杂的事情。

-----------------------------------------------------------------------------------------------------------------------

代码传送门 Git 地址 :

教程说明:https://github.com/andyczy/czy-nexus-commons-utils

工具仓库:https://github.com/andyczy/czy-study-java-commons-utils

开源中国:https://www.oschina.net/p/java-excel-utils(大家多多支持评论收藏)

    ### maven 推荐使用最新版本

    <dependency>        
        <groupId>com.github.andyczy</groupId>       
        <artifactId>java-excel-utils</artifactId>       
        <version>4.0</version>      
    </dependency>  

 

 1、何为万能Java操作Excel导出工具类?

   大家有没有这样的需求?

  • 多表格导出 ?
  • 设置各种样式(行样式、列、某个单元格样式)?需注意的是:过多的设置样式会影响速度!
  • 各式各样的合并、字体颜色、列宽?
  • 设置下拉列?
  • 固定表头?
  • 大标题?

有时候也遇到这样的需求,每次都去写一大堆代码?不用担心,这个工具类全部帮你解决!全自定义全家桶套餐!

该代码逻辑是经过多个项目和很多次验证,如果有更好的优化,如发现bug和有优化方案欢迎评论或者私信。

 

2、实例?

直接列举,具体使用方法代码逻辑写的很清楚。

 

 

3、导入实例?

多表格数据获取、从第几行开始获取、多单元根据那些列为空来忽略行数据。

导入不转换成对象,直接获取到数据(支持多表格),直接获取数据更加方便、根据列循环获取数据。

如:

9、导入配置:(第几行开始获取数据)  参数 indexMap
       
 参数说明:多单元从第几行开始获取数据,默认从第二行开始获取(可为空)
 HashMap hashMapIndex = new HashMap();
 hashMapIndex.put(1,3);  //  第一个表格从第三行开始获取
       
10、导入配置:(列为空来忽略行数据)  参数 continueRowMap
       
 参数说明:多单元根据那些列为空来忽略行数据(可为空)
 HashMap mapContinueRow = new HashMap();
 mapContinueRow.put(1,new Integer[]{1, 3});  // 第一个表格第1、3列为空就忽略这行数据
       
11、导入时间格式(默认:yyyy-MM-dd)、导入数字保留的小数点(默认:#.###### 六位)
        
 ExcelUtils excelUtils = ExcelUtils.initialization();
 excelUtils.setNumeralFormat("#.####");                  // (可为空)期望保留小数的位数(#.####)这样保留四位。
 // (可为空) (poi 只接受无中文的日期格式、如果你想转换别的格式,这个参数要和导入表中日期格式类似,如表格中为:2019年02月14日 12时12分)。
 excelUtils.setDateFormatStr("yyyy年MM月dd日 HH时mm分");  
 excelUtils.setExpectDateFormatStr("yyyy-MM-dd HH-mm");  // (可为空、默认的值是:dateFormatStr 参数值) 期望转换后的日期格式。
 // 执行导入函数   ExcelUtils.importForExcelData()
   

展开阅读全文

没有更多推荐了,返回首页