只导设置别名的字段
Hutool 的导出会默认将实体类(或Map)的所有字段都导出来,有时候根据业务的需求不要一些多余的字段,这就很烦,请教了一下大佬,知道有这么一个方法
bigWriter.setOnlyAlias(true); // 官方提供了这个方法,参数为true时只导出有别名的
工具类
public class HuExcelUtils {
/**
* excel 导出工具类
*
* @param response
* @param fileName 文件名
* @param collection 对象集合
* @param columnNames 字段名
* @param alias 字段对应的别名
* @param columnWidth 列宽(可以为null) - 默认宽度25
*/
public static void exportExcel(HttpServletResponse response, String fileName, Collection<?> collection,
String[] columnNames, String[] alias, int[] columnWidth) {
ExcelWriter bigWriter = ExcelUtil.getBigWriter();
if (columnWidth == null || columnNames.length != columnWidth.length) {
// 设置默认宽度
for (int i = 0; i < columnNames.length; i++) {
bigWriter.addHeaderAlias(columnNames[i], alias[i]);
bigWriter.setColumnWidth(i, 25);
}
} else {
// 设置自定义宽度
for (int i = 0; i < columnNames.length; i++) {
bigWriter.addHeaderAlias(columnNames[i], alias[i]);
bigWriter.setColumnWidth(i, columnWidth[i]);
}
}
// 设置只导出有别名的字段
bigWriter.setOnlyAlias(true);
// 设置默认行高
bigWriter.setDefaultRowHeight(18);
// 设置冻结行
bigWriter.setFreezePane(1);
// 一次性写出内容,使用默认样式,强制输出标题
bigWriter.write(collection, true);
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 导出工具类,字段和别名可以不用分开
*
* @param response
* @param fileName 文件名
* @param collection 对象集合
* @param fieldAndAlias 字段和别名,Map<字段, 别名> 如:Map<"name", "姓名">
* @param columnWidth 列宽(可以为null) - 默认宽度25
*/
public static void exportExcel(HttpServletResponse response, String fileName, Collection<?> collection,
Map<String, String> fieldAndAlias, int[] columnWidth) {
ExcelWriter bigWriter = ExcelUtil.getBigWriter();
if (columnWidth == null || columnWidth.length != fieldAndAlias.size()) {
// 设置默认宽度
for (int i = 0; i < fieldAndAlias.size(); i++) {
bigWriter.setColumnWidth(i, 25);
}
} else {
// 设置自定义宽度
for (int i = 0; i < columnWidth.length; i++) {
bigWriter.setColumnWidth(i, columnWidth[i]);
}
}
// 设置字段和别名
bigWriter.setHeaderAlias(fieldAndAlias);
// 设置只导出有别名的字段
bigWriter.setOnlyAlias(true);
// 设置默认行高
bigWriter.setDefaultRowHeight(18);
// 设置冻结行
bigWriter.setFreezePane(1);
// 一次性写出内容,使用默认样式,强制输出标题
bigWriter.write(collection, true);
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);
}
}
使用
@Controller
public class ReportController {
@ResponseBody
@RequestMapping("/export")
public void export(HttpServletResponse response, ModelMap model, PdaDTO pdaDTO) {
List<Map<String, Object>> data = pdaReportService.findScanCodeWarehousePageData(pdaDTO, null);
// <字段名,标题>
Map<String, String> fieldAndAlias = new LinkedHashMap<String, String>();
fieldAndAlias.put("customer_code", "客户编码");
fieldAndAlias.put("name", "客户名称");
fieldAndAlias.put("product_code", "产品编码");
fieldAndAlias.put("product_name", "产品名称");
fieldAndAlias.put("product_spec", "规格");
fieldAndAlias.put("product_category", "产品品类");
fieldAndAlias.put("created_at", "扫码入库日期");
fieldAndAlias.put("product_lot", "生产批次号");
fieldAndAlias.put("code_type", "条码类型");
fieldAndAlias.put("product_mdf", "生产日期");
fieldAndAlias.put("effective_days", "效期");
fieldAndAlias.put("memo", "备注");
// 设置标题别名
String[] alias = fieldAndAlias.values().toArray(new String[0]);
// 设置单元格值
String[] properties = fieldAndAlias.keySet().toArray(new String[0]);
String fileName = "明细导出";
HuExcelUtils.exportExcel(response, fileName, data, properties, alias, null);
}
}