123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package com.ichaoj.ams.common.util;
- import cn.hutool.core.date.DateUtil;
- import cn.hutool.core.io.IoUtil;
- import cn.hutool.poi.excel.ExcelUtil;
- import cn.hutool.poi.excel.ExcelWriter;
- import com.ichaoj.ams.response.statistics.SheetDTO;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.util.IOUtils;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServletResponse;
- import java.io.*;
- import java.net.URLEncoder;
- import java.util.List;
- /**
- * POI相关操作
- * @author cjwen
- */
- public class PoiUtils {
- /**
- * 导出多个 Sheet 页
- * @param response 响应
- * @param sheetList 页数据
- * @param fileName 文件名
- */
- public static void exportExcel(HttpServletResponse response, List<SheetDTO> sheetList, String fileName) {
- ExcelWriter bigWriter = ExcelUtil.getBigWriter();
- // 重命名第一个Sheet的名称,不然会默认多出一个Sheet1的页
- bigWriter.renameSheet(0, sheetList.get(0).getSheetName());
- for (SheetDTO sheet : sheetList) {
- // 指定要写出的 Sheet 页
- bigWriter.setSheet(sheet.getSheetName());
- List<Integer> columnWidth = sheet.getColumnWidth();
- if (columnWidth == null || columnWidth.size() != sheet.getFieldAndAlias().size()) {
- // 设置默认宽度
- for (int i = 0; i < sheet.getFieldAndAlias().size(); i++) {
- bigWriter.setColumnWidth(i, 25);
- }
- } else {
- // 设置自定义宽度
- for (int i = 0; i < columnWidth.size(); i++) {
- bigWriter.setColumnWidth(i, columnWidth.get(i));
- }
- }
- // 设置字段和别名
- bigWriter.setHeaderAlias(sheet.getFieldAndAlias());
- // 设置只导出有别名的字段
- bigWriter.setOnlyAlias(true);
- // 设置默认行高
- bigWriter.setDefaultRowHeight(18);
- // 设置冻结行
- bigWriter.setFreezePane(1);
- // 一次性写出内容,使用默认样式,强制输出标题
- bigWriter.write(sheet.getCollection(), 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);
- }
- }
|