重要方法
// 指定要寫出的 Sheet 頁
bigWriter.setSheet(sheet.getSheetName());
工具類
public class HuExcelUtils {
/**
* 導出多個 Sheet 頁
* @param response
* @param sheetList 頁數據
* @param fileName 文件名
*/
public static void exportExcel(HttpServletResponse response, List<SheetDTO> sheetList, String fileName) {
ExcelWriter bigWriter = ExcelUtil.getBigWriter();
// 重命名第一個Sheet的名稱,不然會默認多出一個Sheet1的頁
bigWriter.renameSheet(0, sheetList.get(0).getSheetName());
for (SheetDTO sheet : sheetList) {
// 指定要寫出的 Sheet 頁
bigWriter.setSheet(sheet.getSheetName());
Integer[] columnWidth = sheet.getColumnWidth();
if (columnWidth == null || columnWidth.length != sheet.getFieldAndAlias().size()) {
// 設置默認寬度
for (int i = 0; i < sheet.getFieldAndAlias().size(); i++) {
bigWriter.setColumnWidth(i, 25);
}
} else {
// 設置自定義寬度
for (int i = 0; i < columnWidth.length; i++) {
bigWriter.setColumnWidth(i, columnWidth[i]);
}
}
// 設置字段和別名
bigWriter.setHeaderAlias(sheet.getFieldAndAlias());
// 設置只導出有別名的字段
bigWriter.setOnlyAlias(true);
// 設置默認行高
bigWriter.setDefaultRowHeight(18);
// 設置凍結行
bigWriter.setFreezePane(1);
// 一次性寫出內容,使用默認樣式,強制輸出標題
bigWriter.write(sheet.getCollection(), true);
// 設置所有列爲自動寬度,不考慮合併單元格
// bigWriter.autoSizeColumnAll();
}
ServletOutputStream out = null;
try {
//response爲HttpServletResponse對象
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition",
"attachment;filename=" +
URLEncoder.encode(fileName + DateUtil.today() + ".xlsx", "UTF-8"));
out = response.getOutputStream();
bigWriter.flush(out, true);
} catch (IOException e) {
e.printStackTrace();
} finally {
// 關閉writer,釋放內存
bigWriter.close();
}
//此處記得關閉輸出Servlet流
IoUtil.close(out);
}
}
/**
* Excel - Sheet頁
*/
public class SheetDTO implements Serializable {
private static final long serialVersionUID = 1L;
/** sheet頁名稱 */
private String sheetName;
/** 字段和別名,如果使用這個,properties 和 titles可以不用處理 */
private Map<String, String> fieldAndAlias;
/** 字段 */
private String[] properties;
/** 標題/別名 */
private String[] titles;
/** 列寬 */
private Integer[] columnWidth;
/** 數據集 */
private Collection<?> collection;
public Map<String, String> getFieldAndAlias() {
if (fieldAndAlias == null) {
this.fieldAndAlias = new LinkedHashMap<String, String>();
for (int i = 0; i < properties.length; i++) {
fieldAndAlias.put(properties[i], titles[i]);
}
}
return fieldAndAlias;
}
public void setFieldAndAlias(Map<String, String> fieldAndAlias) {
this.fieldAndAlias = fieldAndAlias;
}
// 省略其他set get
}
// 示例Controller
public Class TestController {
/**
* 條件全部導出
*/
@ResponseBody
@RequestMapping("/export_all")
public void export_all(HttpServletResponse response, PolicyCountSupplementDTO policyCountSupplementDTO) {
List<SheetDTO> sheetList = new ArrayList<SheetDTO>();
List<Map<String, Object>> listDatas = policyCountSupplementService
.findPage(policyCountSupplementDTO, null).getListData();
/** 明細 */
List<Map<String, Object>> policyCountItems = policyCountService.findItemInfoList(idStr);
List<Map<String, Object>> policyCountSupplements = policyCountSupplementService.findListByPolicyCountId(idStr);
//返利流水主表
ExcelMultiViewData excelMultiViewData1 = getExcelMultiViewData1("政策上賬導出", listDatas);
SheetDTO sheet1 = new SheetDTO();
sheet1.setTitles(excelMultiViewData1.getTitles());
sheet1.setProperties(excelMultiViewData1.getProperties());
sheet1.setSheetName(excelMultiViewData1.getSheetName());
sheet1.setCollection(listDatas);
sheetList.add(sheet1);
//返利流水明細
ExcelMultiViewData excelMultiViewData2 = getExcelMultiViewData2("政策上賬導出", policyCountItems);
SheetDTO sheet2 = new SheetDTO();
sheet2.setTitles(excelMultiViewData2.getTitles());
sheet2.setProperties(excelMultiViewData2.getProperties());
sheet2.setSheetName(excelMultiViewData2.getSheetName());
sheet2.setCollection(policyCountItems);
sheetList.add(sheet2);
// 特殊增補明細
ExcelMultiViewData excelMultiViewData3 = getExcelMultiViewData3("政策上賬導出", policyCountSupplements);
SheetDTO sheet3 = new SheetDTO();
sheet3.setTitles(excelMultiViewData3.getTitles());
sheet3.setProperties(excelMultiViewData3.getProperties());
sheet3.setSheetName(excelMultiViewData3.getSheetName());
sheet3.setCollection(policyCountSupplements);
sheetList.add(sheet3);
HuExcelUtils.exportExcel(response, sheetList, "政策上賬導出");
}
}