1. 程式人生 > 其它 >java 生成excel (多級表頭)匯出

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();
        }