关于easypoi导出excel

本文详细记录了在SpringBoot项目中使用Easypoi集成模板导出Excel时遇到的问题及解决方案,包括避免多层循环导致的数据错乱,处理单元格合并,设置样式,插入新行数据等操作,同时提供了模板导出的简单代码示例。
摘要由CSDN通过智能技术生成

坑合集:

springboot集成easypoi并使用其模板导出功能和遇到的坑_巴中第一皇子的博客-CSDN博客_easypoi springboot1.背景最近在做个使用poi导出excel的需求,由于所需要的excel较为复杂,所以我准备使用easypoi的模板导出功能去实现2.使用2.1 集成 <!--excel--> <!--这里如果直接引入easypoi集成springboot的包即easypoi-spring-boot-starter,那么启动需要spring-boot-sta...https://blog.csdn.net/weixin_38312502/article/details/105627498样式设定

easyPoi导出excel工具类和设置excel导出样式(边框,背景色,字体)_zhouqu3790的博客-CSDN博客**使用方式**1.使用时把样式工具类ExcelStyleUtil当做参数传递进去即可ExportParams exportParams = new ExportParams(&amp;amp;quot;标题名称&amp;amp;quot;, &amp;amp;quot;sheet名称&amp;amp;quot;, ExcelType.XSSF);exportParams.https://blog.csdn.net/zhouqu3790/article/details/82688580我用的是4.1.2

模板导出中

1.多层循环我没有用,因为会出现错乱,部分数据丢失或者为空等问题

2.循环不要用模板里的单元格合并。会出现错乱,部分数据丢失或者为空等问题。

2.1 我的处理方式是在模板里需要合并的单元格赋予同样的值,然后在代码中进行合并

2.2 纵向合并:

//纵向合并相同内容的单元格
// 3是开始合并的行数
// 0是需要合并的所在列
PoiMergeCellUtil.mergeCells(sheet, 3, 0);

2.3 横向合并:

//横向合并相同内容的单元格
CellRangeAddress craOne = new CellRangeAddress(0,3,2, 4);
//CellRangeAddress(第几行开始,第几行结束,第几列开始,第几列结束)
sheet.addMergedRegion(craOne);

2.3.1 循环里横向合并,我是在代码里对每一行都执行了这句操作。否则所有行会被合并成一个单元格

3.设置样式时,需要对每个cell都进行设置

CellStyle style = workbook.createCellStyle();
style.setBorderTop(BorderStyle.THIN);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
style.setWrapText(true);
style.setAlignment(HorizontalAlignment.LEFT);
style.setVerticalAlignment(VerticalAlignment.CENTER);


row.getCell(i).setCellStyle(style);

4.在list后还有数据时,如果直接在模板里写第二部分数据,会出现第二部分数据把list的数据覆盖的问题

4.1我的处理方式是:list写在模板里,在代码里写第二部分的数据

Row newRow = sheet.createRow(sheet.getLastRowNum());
newRow.setHeightInPoints(50);
newRow.createCell(0).setCellValue("值1");
newRow.createCell(1).setCellValue("值2");

ps:其实写到这儿了我觉得我还不如全部用代码画,不要用模板

5.在已有的数据中插入新的一行数据

5.1 如果是最后一行,直接新增sheet.creatRow即可

5.2 如果是插入到中间,要进行移动

// sheet.shiftRows(插入行, 当前数据最后一行, 移动几行 ,是否复制行高, 是否重置原始行高);
sheet.shiftRows(12, sheet.getLastRowNum(), 1 ,true,false);

这句是把插入行以下的数据全部下移一行,以便空出空行去插入新数据,防止覆盖

通过这个也可以用来删除某行数据,把移动几行换成负数即可

6.简单的模板导出代码

首先准备好模板

然后代码段参考如下

TemplateExportParams params = new TemplateExportParams(templateUrl);
params.setScanAllsheet(true);

Workbook workbook = ExcelExportUtil.exportExcel(sheetMap, params);
response.setCharacterEncoding("UTF-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 接着这儿可以插入一些特殊处理的数据或者合并单元格之类的操作
// 如果不需要就直接跳过
workbook.write(response.getOutputStream());
workbook.close();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值