更新日志:(如果有更好的优化方案或者更高级的工具类:欢迎评论或者私信)
* 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 推荐使用最新版本
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()