import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public void exportToExcel(HttpServletResponse response, List<Map<String, Object>> data) {
Logger logger = LoggerFactory.getLogger(this.getClass());
// 创建ExcelWriter对象,指定为xlsx格式
ExcelWriter writer = ExcelUtil.getWriter(true); // true表示启用xlsx格式
try {
// 写入表头(从第一个Map获取键作为表头)
if (!data.isEmpty()) {
var title = data.get(0).keySet();
for (String key : title) {
writer.addHeaderAlias(key, key);
}
// 写入数据
writer.write(data);
}
// 设置响应头,使得浏览器能够正确识别并下载文件
response.setContentType(writer.getContentType());//hutool包里面有下载Excel的头信息,通过ExcelUtil.getWriter(true)区分是xlsx还是xls
response.setHeader("Content-Disposition", "attachment;filename=data.xlsx");
// 获取输出流并写出数据
OutputStream ou = response.getOutputStream();
writer.flush(ou);
ou.flush();
} catch (IOException e) {
logger.error("导出Excel出现异常", e);
// 这里可以根据具体业务需求考虑返回给前端更友好的错误提示等操作
} finally {
try {
// 先关闭输出流
if (writer.getOutputStream()!= null) {
writer.getOutputStream().close();
}
// 再关闭ExcelWriter
writer.close();
} catch (IOException e) {
logger.error("关闭资源出现异常", e);
}
}
}