SpringBoot+Jxls

一、简单文件导出
1.导入jar包
<!-- https://mvnrepository.com/artifact/org.jxls/jxls -->
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>2.6.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jxls/jxls-poi -->
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-poi</artifactId>
<version>2.6.0-rc1</version>
</dependency>
2.编码
Context context = new Context();
context.putVar("EntityVos",EntityVos);
response.setHeader("content-type", "application/octet-stream");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;fileName=" + new String(("***.xls").getBytes(),"ISO-8859-1"));
JxlsHelper.getInstance().processTemplate(fis, response.getOutputStream(), context);
3.模板
  第一个单元格添加批注 jx:area(lastCell=”L3”) jxls解析模板面积到3行L列
  第一行数据添加备注 jx:each(items=”
EntityVos”,var=”EntityVo”,lastCell=”L3”) 行数据解析到3行L列

二、复杂文件导出
黑龙江 鸡西 密山
虎林
哈尔滨 松北区
辽宁 沈阳 浑南区

1.导入jar包
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<version>1.0.6</version>
</dependency>
2.编码
public class MergeVo {
private int fromRow;
private int toRow;
private int fromIndex;
private int toIndex;
}
//读取jar包resource下的文件 正常无法拿到
InputStream is = this.getClass().getResourceAsStream("/static/template.xls");
Map<String, Object> beans = new HashMap();
/**
* analysis为排好序的数据对象 如下
* 黑龙江 鸡西 密山
* 黑龙江 鸡西 虎林
* 黑龙江 哈尔滨 松北区
* 辽宁 沈阳 浑南区
*/
beans.put("EntityVos", analysis);
XLSTransformer transformer = new XLSTransformer();
HSSFWorkbook workBook = (HSSFWorkbook) transformer.transformXLS(is, beans); // 传入模板的输入流和map
// 开始进行合并单元格
HSSFSheet sheet = workBook.getSheetAt(0);
HashMap<String,List<MergeVo>> merge = getMerge(analysis);
List<MergeVo> provinceMerge = merge.get("provinceMerge");
List<MergeVo> cityMerge = merge.get("cityMerge");
for (MergeVo m : provinceMerge) {
sheet.addMergedRegion(new CellRangeAddress(m.getFromRow() + 2, m.getToRow() + 2, 0, 0));
}
for (MergeVo m : cityMerge) {
sheet.addMergedRegion(new CellRangeAddress(m.getFromRow() + 2, m.getToRow() + 2, 1, 1));
}
response.setHeader("content-type", "application/octet-stream");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "attachment;fileName=" + new String(("询价分析.xls").getBytes(),"ISO-8859-1"));
workBook.write(response.getOutputStream());
3.模板

 

 jx:area(lastCell="N5")

<jx:forEach items="${EntityVos}" var="entity">

<jx:forEach>

 

 

posted @ 2019-08-08 16:51  袋子里的袋鼠  阅读(1750)  评论(0编辑  收藏  举报