Java 使用 Apache POI 导出 Excel
先说点废话
菜鸟做了这么久的维护工作,终于开始接触到代码编写😐,庆幸。“你就先做个简单的,Excel导出,没问题吧?” “额,没,没问题”🙂。根据摸板导出Excel,那先看看摸板吧。
🤣🤣🤣怎么玩儿?百度、百度(网络上大神贴是真的强),经过一顿搜索之后,知道了Apache POI这么个东西;
接触到新的东西,所以稍微整理一下,菜鸟贴,不喜勿喷;
Apache POI 使用
我的实现案例是根据自己的Excel摸板写的,不具备通用性,这边我参考了导出任何对象集合的数据到Excel(通用版工具类),在这个的基础上进行了修改。用的是Spring boot 框架,POI版本是3.6;
1、 在pom.xml中导入jar包
1 | <dependency> |
2、实现多个sheet导出
在同一个workbook下,循环遍历名称集合,通过HSSFSheet创建多个sheet;
1 | // 创建Excel文件 |
3、合并单元格
首行和首列的对应的下标为0,所以在合并如:第一行、第二行,第一列、第二列单元格代码如下:
1 | //合并单元格 |
合并单元格之后单元格内容会保留第一个单元格的内容;
4、设置行高和列宽
行高和列宽的设置,有各自的计算公式(想要深入了解,度娘都有)
1 | //设置行高为20.25 |
行高计算公式:x*20 (x为需要设置的行高)
1 | //设置列宽为37 |
列宽计算公式:256*x+184 (x为需要设置的列宽)
5、自定义背景颜色
我在设置背景色的时候,在度娘上找了半天,确实很多对应的标准色号。但总是感觉跟需求差很多。
1 | //自定义背景色 |
IndexedColors.GREY_25_PERCENT.getIndex() 是任意找了一个色号,(byte) 214, (byte) 220, (byte) 228 根据你需要的颜色对它手动赋参数;
6、多行标题处理
这次遇到的Excel摸板是多行标题,没想到更好的处理方法,就是将标题一下的内容存入list,用 list.size() 来确定标题一和标题二之间的间距,从而确定标题二的起始行。
7、输出流
网上输出流的写法也各不相同,但是都大同小异。这边只不过在导出的文件名上,用了时间后缀,来防止多次导出文件名重复的问题。
1 | //获取输出流 |
8、其他
还有一些其他样式,使用时相对比较简单;
- 字体位置
1 | //水平居中 |
//下边框
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
//左边框
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
//上边框
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
//右边框
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
1 |
|
- 字体样式
1 | HSSFFont font = workbook.createFont(); |
再说点废话
总结一下这次学习的感受,整个导出功能,首先是POI绘制Excel样式,这部分难点在标题二,如何准备定位到起始行,其实也是和标题一下的数据有关。所以在实现时只能先完成上半部分的导出,之后再考虑下半部分内容。再者是数据的处理,数据库查询就不提了,在插入Excel后,如何确定哪些单元格需要合并(特别是标题二下的合并)。后来也算是完成了,但是代码写的是真的烂😟。
😒菜鸟的难受大神难以体会,还得继续努力、坚持、积累。💪
- 本文标题:Java 使用 Apache POI 导出 Excel
- 本文作者:往后余生
- 本文链接:https://yuefengs.top/posts/b2f25343/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!