EasyExcel封装下载导出多sheet表格--根据某个字段分类

  • 工具类 ExcelUtils 名称自定义
public class ExcelUtils {
  public static <T> void exportExcel(Map<String, List<T>> departmentData, String sheetName, Class<T> clazz, HttpServletResponse response) {
    exportExcel(departmentData, sheetName, clazz, false, response);
  }


  public static <T> void exportExcel(Map<String, List<T>> departmentData,String sheetName, Class<T> clazz, boolean merge, HttpServletResponse response) {
    try {
      resetResponse(sheetName, response);
      ServletOutputStream os = response.getOutputStream();
      ExcelWriterBuilder writerBuilder = EasyExcel.write(os, clazz).autoCloseStream(false)
              .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
              .registerConverter(new ExcelBigNumberConvert());
      // 构建 ExcelWriter 对象
      ExcelWriter excelWriter = writerBuilder.build();
      for (Map.Entry<String, List<T>> entry : departmentData.entrySet()) {
        String departmentName = entry.getKey();
        List<T> departmentList = entry.getValue();

        ExcelWriterSheetBuilder sheetBuilder = writerBuilder.sheet(departmentName);

        if (merge) {
          sheetBuilder.registerWriteHandler(new CellMergeStrategy(departmentList, true));
        }

        WriteSheet sheet = sheetBuilder.head(clazz).build();
        excelWriter.write( departmentList, sheet);
      }

      // 关闭 ExcelWriter 对象
      excelWriter.finish();
    } catch (IOException e) {
      throw new RuntimeException("导出Excel异常", e);
    }
  }




  /**
   * Excel名称自定义
   * @param sheetName
   * @param response
   * @throws UnsupportedEncodingException
   */

  private static void resetResponse(String sheetName, HttpServletResponse response) throws UnsupportedEncodingException {
    String filename = encodingFilename(sheetName);
    FileUtils.setAttachmentResponseHeader(response, filename);
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8");
  }

  public static String encodingFilename(String filename) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    return sdf.format(new Date()) + filename + ".xlsx";
  }

  private ExcelUtils() {
  }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值