easypoi模板导出excel以及遇到的合并问题


前言

背景是甲方要导出周报,但是导出的周报的样式比较复杂,只能选用模板导出,但是第一次使用模板导出遇到了一些问题的记录


一、模板导出的关键词

下图是来自官方文档的指令图片,附带官网链接,可以直接去官网看
在这里插入图片描述
easypoi官网链接

二、模板填写

下图就是我的模板,在测试的时候我感觉&NULL&和&NULL没有太大的区别,另外链表部分如果有为空的列必须要填
在这里插入图片描述
在固定文字,即存在于表头或者结尾只需要输入一次的地方可以使用 {{变量名}}
而在下面的列表填写值用的{{ $fe:变量名 t.变量名}},作用是横向遍历并新增,尾端总结这里一样(图片没有是因为我还没加上),这里的t.在官网有介绍,看图,另外}}必须和变量名紧挨着,不能有空格

在这里插入图片描述

另外代码中的模板后缀问题,xls和xlsx有一定区别,一般最好使用xlsx
对应程序部分

//获取模板路径,路径后面那个true是开启全sheet页的扫描,只有一个sheet的情况可以不写
		TemplateExportParams params = new TemplateExportParams("temp/week.xlsx", true);
		//开启横向遍历
		params.setColForEach(true);
		//用map是为了键对
		Map<String, Object> data = new HashMap<>();
		//获取要导入的链表信息(为了更方便理解这里代码不是源代码)
		List<类名> list = "获取导入值的方法,可以从数据库或者手动添加";
		//获取表格结尾的人员汇总信息
		String sumPeople = (String) meoiipProcedureFileMapper.getProjectPeopleDepart(ProjectContext.getPojectId());
		//根据在表格中的变量名称放入数据
		data.put("duringDate", "我这里下了一个方法来获取时间");
		data.put("loginer", "导出人姓名,比如admin或者方法获取");
		//链表导入要根据easypoi的官网的指令,此处使用{{$fe}},遍历并新增行,如你所见直接填写链表名称就可以
		data.put("report",list);
		data.put("peoplePlan"," 本周派遣人员:"+sumPeople+";下周计划派遣人员:"+sumPeople+"。");

三、导出模板合并问题

在导出时遇到一个问题就是导出多行的时候,由于后面几个实际上是多列合并为一列,除去开头和结尾的行,其余行都没有合并单元格,这是easypoi本身的bug,看这个方法MergedRegionHelper.class,这是在另一个大佬那里看到的,解决方法是在方法里合并单元格
在这里插入图片描述

//这是easypoi的bug,在4.4.0版本也没有解决所以手动合并
Workbook book = new FsscExcelUtil().createExcelByTemplate(params, null, null, data);
//这里的参数从左右到右分别是,第一sheet页,初始行,最终行,初始列,最终列
PoiMergeCellUtil.addMergedRegion(book.getSheetAt(0),5,list.size()+4,8,24);

四 结尾部分

//设置语言
		response.setCharacterEncoding("UTF-8");
		response.setHeader("content-Type", "application/vnd.ms-excel");
		response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("现场施工周报" + ".xlsx", "UTF-8"));
		book.write(response.getOutputStream());

以上代码拼起来就是完整的方法啦


总结

以上就是我在模板导出部分遇到的问题以及解决方法啦,希望对你有所帮助。
另外我对模板导入也不是很理解,还不会在模板导入的时候搞列合并,以及对于指令]]也不是很理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值