java列表文件下載
這幾天做列表下載功能,寫在這裏大家可以看一下
首先是Controller類
//ApplyTradeCancelDTO.tradeConfirmIn queryTradeBean查詢列表參數
@RequestMapping(value = "/confirm/excel", method = RequestMethod.POST)
public void excel(@RequestBody ApplyTradeCancelDTO.tradeConfirmIn queryTradeBean, HttpServletResponse response) throws Exception {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=applyTrade.xls");
ServletOutputStream out = response.getOutputStream();
//登錄用戶
queryTradeBean.setOpId(getOpId());
tradeService.setTradeConfirmExcel(queryTradeBean, out);
IoUtil.close(out);
}
public void setTradeConfirmExcel(ApplyTradeCancelDTO.tradeConfirmIn queryTradeBean, ServletOutputStream out) {
//根據參數查詢要導出的列表
PageQuery<ApplyTradeCancelDTO.tradeConfirmOut> tradeConfirm = confirmApplyTradeDao
.findTradeConfirm(queryTradeBean.getPageNum(), queryTradeBean.getPageSize(), queryTradeBean);
//由於項目的標題title是從數據庫查詢出來的,這裏可以換成你的,格式[{"code":"顯示字段","name":"顯示字段名稱"},{"code":"顯示字段","name":"顯示字段名稱"}]
List<SysOperatorDTO.setting> list = sysOperatorService.getParsedOperatorSetting(queryTradeBean.getOpId(), D.operatorSettingFuncNo.TRADE_CONFIRM_EXCEL);
//解析標題
Map<String, String> columns = ExcelTool.getColumns(list);
//導出
ExcelTool.export(columns, ExcelTool.dataFilter(columns, tradeConfirm.getList()), out);
}
public static Map<String, String> getColumns(List<SysOperatorDTO.setting> list) {
Map<String, String> columns = Maps.newHashMap();
list.forEach(i -> {
if (D.Switch.ON.equals(i.getCheck())) {
columns.put(i.getCode(), i.getName());
}
});
return columns;
}
/**
* 使用用戶自定義表頭-生成文件-寫入輸出流
*
* @param columns 表頭
* @param rows 數據
* @param out 輸出流
*/
public static void export(Map<String, String> columns, List<?> rows, ServletOutputStream out) {
ExcelWriter writer = ExcelUtil.getWriter();
columns.forEach((k, v) -> {
writer.addHeaderAlias(k, v);
});
writer.write(rows, true);
writer.flush(out);
writer.close();
}
/**
* 導出excel表格
*
* @param columns
* @param list
* @return
*/
public static List<Map<String, Object>> dataFilter(Map<String, String> columns, List<?> list) {
Set<String> keys = columns.keySet();
List<Map<String, Object>> res = Lists.newArrayList();
list.forEach(i -> {
Map<String, Object> map = Maps.newHashMap();
BeanUtil.beanToMap(i, map, false, new Editor<String>() {
@Override
public String edit(String s) {
return keys.contains(s) ? s : null;
}
});
res.add(map);
});
return res;
}