文章目录
- 前言
- 制定模板
- 1、限定模板数据的范围
- 2、设定报表展示项
- 编写测试类
- 1、将xls模板文件放于 resource 下的 doc文件夹中
- 2、导入依赖文件
- 3、编写接口和导出逻辑
- 效果预览
- 结论
前言
在之前的博客中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能够完美的实现样式自定义
、单数据
、多报表
集成。