一、簡單文件導出
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>