package com.gunshi.project.ss.service; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gunshi.project.ss.mapper.StEvpoMapper; import com.gunshi.project.ss.model.StEvpo; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.net.URLEncoder; import java.util.List; @Service @Slf4j @Transactional(rollbackFor = Exception.class) public class StEvpoService extends ServiceImpl { public void export(HttpServletResponse response) { List list = this.lambdaQuery().orderByAsc(StEvpo::getMonth).list(); list.stream().forEach(o ->{ o.setEvaporation(o.getEvaporation().setScale(2)); }); // 通过工具类创建writer ExcelWriter writer = ExcelUtil.getWriter(); // 自定义标题别名(只包含需要导出的字段) writer.addHeaderAlias("month", "月份"); writer.addHeaderAlias("evaporation", "日蒸发量(万m³)"); // 只写出设置了别名的字段,默认写出所有字段 writer.setOnlyAlias(true); // 一次性写出内容,使用默认样式 writer.write(list, true); // 设置响应内容类型 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8"); try { // 设置响应头信息 String fileName = URLEncoder.encode("蒸发量数据", "UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx"); // 将writer对象刷新到响应输出流中 writer.flush(response.getOutputStream(), true); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭writer,释放内存 writer.close(); } } }