前言
在之前的文章中springboot——使用jxls实现excel模板导出excel,具体说明了jxls框架的基本使用。
除了最简单的单列表展示外,jxls还具有同sheet
页展示多个列表的能力,接下来一起继续探究。
制定模板
1、限定模板数据的范围
采取下面的批注,指定需要渲染显示的报表范围。
这里的范围只考虑第一行的范围!
命令如下所示:
jx:area(lastcell=”h15”)
2、设定报表展示项
报表一,只显示单条数据。
报表二,进行列表展示,并设置批注,如下所示:
jx:each(items="datalist2" var="item" lastcell="c8")
报表三,与报表二中的批注一样,只是接收参数变量名不同。
批注如下所示:
jx:each(items="datalist3" var="item" lastcell="c12")
编写测试类
1、将xls模板文件放于 resource 下的 doc文件夹中
2、导入依赖文件
<!-- excel 填充 --> <dependency> <groupid>org.jxls</groupid> <artifactid>jxls</artifactid> <version>2.8.1</version> </dependency> <dependency> <groupid>net.sf.jxls</groupid> <artifactid>jxls-core</artifactid> <version>1.0.6</version> </dependency> <dependency> <groupid>org.jxls</groupid> <artifactid>jxls-poi</artifactid> <version>2.8.1</version> </dependency>
3、编写接口和导出逻辑
@requestmapping("/ss") public void download(httpservletrequest request,httpservletresponse response) throws exception { map<string, object> map = new hashmap(); map.put("name1","xiangjiao"); map.put("age1","10"); map.put("are1","中国"); // 报表二 list<map<string, object>> datalist = new arraylist(); for (int i = 0; i < 10; i++) { map<string, object> params = new hashmap<>(); params.put("name2","1_"+i); params.put("age2","xj_"+i); params.put("are2",22); datalist.add(params); } // ${item.num} map.put("datalist2",datalist); // 报表三 list<map<string, object>> datalist3 = new arraylist(); for (int i = 0; i < 10; i++) { map<string, object> params = new hashmap<>(); params.put("name2","1_"+i); params.put("age2","xj_"+i); params.put("are2",22); datalist3.add(params); } // ${item.num} map.put("datalist3",datalist3); export(map,"test.xls","666.xls",response); } public static void export(map<string, object> datamap, string reportname,string filename, httpservletresponse response) throws ioexception { resource resource = new classpathresource("/doc" +file.separator+ reportname); inputstream in = resource.getinputstream(); // 这里的context是jxls框架上的context内容 context context = poitransformer.createinitialcontext(); context.tomap().putall(datamap); workbook workbook = workbookfactory.create(in); // changing name of the first sheet workbook.setsheetname(0, "sheet1"); poitransformer transformer = poitransformer.createtransformer(workbook); outputstream out = response.getoutputstream(); transformer.setoutputstream(out); // 文件名 - 解决中文乱码问题 string filename = urlencoder.encode(filename, "utf-8"); // 设置响应编码 response.setcharacterencoding("utf-8"); response.setcontenttype("application/x-download"); response.setheader("content-disposition", "attachment;filename=" + filename); jxlshelper.getinstance().processtemplate(context, transformer); in.close(); out.flush(); out.close(); }
效果预览
结论
jxls能够完美的实现样式自定义
、单数据
、多报表
集成。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论