| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- package com.kym.service.impl;
- import cn.hutool.core.io.IoUtil;
- import cn.hutool.poi.excel.ExcelWriter;
- import com.kym.service.ExportService;
- import jakarta.servlet.ServletOutputStream;
- import jakarta.servlet.http.HttpServletResponse;
- import lombok.SneakyThrows;
- import org.springframework.stereotype.Service;
- import java.net.URLEncoder;
- import java.nio.charset.StandardCharsets;
- import java.util.HashMap;
- import java.util.List;
- /**
- * @author skyline
- * @description
- * @date 2023-09-25 17:43
- */
- @Service
- public class ExportServiceImpl implements ExportService {
- @SneakyThrows
- @Override
- public void exportExcel(String fileName, ExcelWriter writer, List<HashMap<String, Object>> rows, HttpServletResponse response) {
- var filename = new String(fileName.concat(".xls").getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
- // 默认的,未添加alias的属性也会写出,如果想只写出加了别名的字段,可以调用此方法排除之
- writer.setOnlyAlias(true);
- // 合并单元格后的标题行,使用默认标题样式 从0开始计算
- writer.merge(writer.getHeaderAlias().size() - 1, fileName);
- // 一次性写出内容,使用默认样式,强制输出标题
- writer.write(rows, true);
- // 自适应列宽 必须在列数据写出后调用
- writer.autoSizeColumnAll();
- //out为OutputStream,需要写出到的目标流
- //response为HttpServletResponse对象
- response.setContentType("application/vnd.ms-excel;charset=utf-8");
- //test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
- response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, StandardCharsets.UTF_8));
- ServletOutputStream out = response.getOutputStream();
- writer.flush(out, true);
- // 关闭writer,释放内存
- writer.close();
- //此处记得关闭输出Servlet流
- IoUtil.close(out);
- }
- }
|