前言
背景是甲方要导出周报,但是导出的周报的样式比较复杂,只能选用模板导出,但是第一次使用模板导出遇到了一些问题的记录
一、模板导出的关键词
下图是来自官方文档的指令图片,附带官网链接,可以直接去官网看
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());
以上代码拼起来就是完整的方法啦文章来源:https://www.toymoban.com/news/detail-515946.html
总结
以上就是我在模板导出部分遇到的问题以及解决方法啦,希望对你有所帮助。
另外我对模板导入也不是很理解,还不会在模板导入的时候搞列合并,以及对于指令]]也不是很理解文章来源地址https://www.toymoban.com/news/detail-515946.html
到了这里,关于easypoi模板导出excel以及遇到的合并问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!