java 生成excel (多级表头)导出
依赖工具包
<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(); }
我是个双鱼座的小王子,沉浸在自己的代码世界里,去探索这未知的世界,希望遇到更多的小伙伴一起前行!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现