依賴工具包
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.3.5</version>
</dependency>
</dependencies>
該工具包是對 Apache POI包的分裝
private void export(HttpServletResponse response, String fileName, List<?> projects, List<SummarizeDownloadColumns> columns) throws IOException {
ExcelWriter bigWriter = ExcelUtil.getBigWriter();
//創建一行空表頭占個位置
bigWriter.writeHeadRow(new LinkedList());
//創建需要展示的的二級表頭,{filedName,中文名}
int lastCol = 0;
for (int i = 0; i < columns.size(); i++) {
if (columns.get(i).getChildren() != null) {
for (int j = 0; j < columns.get(i).getChildren().size(); j++) {
bigWriter.addHeaderAlias(columns.get(i).getChildren().get(j).getProp(), columns.get(i).getChildren().get(j).getLabel() + columns.get(i).getProp());
bigWriter.setColumnWidth(lastCol++, 30);
}
}
}
//根據需要合並添加第一列表頭
bigWriter.merge(0, 1, 0, 0, columns.get(0).getLabel(), true);
bigWriter.merge(0, 0, 1, 14, "第一類(個人)", true);
bigWriter.merge(0, 0, 15, 28, "第一類(企業)", true);
bigWriter.merge(0, 0, 29, 42, "第二類(個人)", true);
bigWriter.merge(0, 0, 43, 56, "第二類(企業)", true);
bigWriter.merge(0, 0, 57, 64, "總計項", true);
// 只導出配置好的列名
bigWriter.setOnlyAlias(true);
bigWriter.write(projects, true);
StyleSet styleSet = bigWriter.getStyleSet();
styleSet.setWrapText();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("filename", URLEncoder.encode(fileName + ".xlsx", "UTF-8"));
ServletOutputStream out = response.getOutputStream();
bigWriter.flush(out, true);
bigWriter.close();
IoUtil.close(out);
}
導出效果

動態生成模板(只需要表頭)
String fileName = "sdjhds";
try {
ExcelWriter bigWriter = ExcelUtil.getBigWriter();
List list = new ArrayList();
list.add("表頭1");
list.add("表頭2");
bigWriter.writeHeadRow(list);
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + ".xls");
response.setHeader("filename", URLEncoder.encode(fileName, "utf-8") + ".xls");
response.setHeader("Pragma", "no-cache");
response.setHeader("Content-type", "application/octet-stream;charset=UTF-8");
ServletOutputStream out = response.getOutputStream();
bigWriter.flush(out, true);
bigWriter.close();
IoUtil.close(out);
} catch (IOException e) {
e.printStackTrace();
}

