当前位置: 首页 > news >正文

下载excel

1.引入依赖

 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.5</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.5</version></dependency><!--&lt;!&ndash; Poi-tl Word 模板引擎&ndash;&gt;--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.2</version></dependency>

2.示例代码

public download(String id, HttpServletResponse response){File file = null;
try{Item item = itemService.fetchById(id);
InputStream in = new ClassPathResource("/template/item.xlsx").getInputStream();
File temp = File.createTempFile("temp","xlsx");
OutputStream out = new FileOutputStream(temp);
IOUtils.copy(in,out);//apache poi
out.flush();
out.close();
in.close();//基于临时文件通过输入流生成xlsx对象并写入数据
XSSFWorkbook workbook = new XSSFWorkbook(temp);
Sheet sheet = workbook.getSheetAt(0);
Row row = sheet.createRow(2);
row.createCell(0).setCellValue(item.getStudentId());
row.createCell(1).setCellValue(item.getName());
row.createCell(2).setCellValue(item.getSex());//输出流生成导出的文件
String fileName = String.format("学生信息下载%s.xlsx",DateUtil.format(DateUtil.date(),"yyyyMMddHHmmss"));
//DateUtil 引用的是hutool
file = new File(fileName);
FileOutputStream fileOutputStream = new FileOutputStream(file);
workbook.write(fileOutputStream);
fileOutputStream.flush():
fileOutputStream.close();
workbook.close();
//把文件写到response的输出流中 最后再删除两个中间文件
response.reset();
response.setContentType("application/vnd.ms-excel; charset=utf-8");
// 解决下载的excel报错问题
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Content-Length", String.valueOf(file.length()));
response.setHeader("Content-Disposition",String.format("attachment; filename=%s",URLEncoder.encode(fileName, StandardCharsets.UTF_8.displayName())));exportFile(response, new FileInputStream(file));}catch(Exception e){throw new RuntimeException(e.getMessage());
}finally {if(null != file) file.delete();}return "ok";}public static void exportFile(HttpServletResponse response, InputStream is){byte[] buff = new byte[1024];BufferedInputStream bis = null;OutputStream os = null;
try{
os = response.getOutputStream();
bis = new BufferedInputStream(is);
int i = bis.read(buff);
while(i!=-1){os.write(buff, 0, buff.length);os.flush();i = bis.read(buff);}}catch (IOException e){e.printStackTrace();
}finally {if(null != bis){try{bis.close();}catch (IOException e){e.printStackTrace();
}}if( os != null){try{os.close();}catch (IOException e ){e.printStackTrace();
}}}}

前端接收时,需要用blob进行接收

即将response.type = "blob"

示例代码

download().done(res=>{const url = URL.createObjcetURL(res);//创建一个指向Blob的URLconst a = document.createElement("a");//创建一个a标签用于下载a.href = url;
let fileName = `学生信息${new Date().format("yyyyMMddhhmmssSSS")}.xlsx`;
a.download = fileName; // 设置下载文件名
document.body.appendChild(a);//将a标签添加到文档中以触发下载
a.click();//模拟点击下载文件
document.body.removeChild(a);//移除a标签})


http://www.mrgr.cn/news/82710.html

相关文章:

  • leetcode 2274. 不含特殊楼层的最大连续楼层数 中等
  • halcon三维点云数据处理(五)创建代表工具和机器人底座的3D模型
  • java.lang.Error: FFmpegKit failed to start on brand:
  • 【微服务】4、服务保护
  • ElasticSearch基础-文章目录
  • LInux单机安装Redis
  • node.js之---集群(Cluster)模块
  • 单片机-串转并-74HC595芯片
  • Java虚拟机(Java Virtual Machine,JVM)
  • 学习Video.js
  • K8s高可用集群之Kubernetes集群管理平台、命令补全工具、资源监控工具部署及常用命令
  • 第四、五章补充:线代本质合集(B站:小崔说数)
  • [SAP ABAP] SMARTFORMS表单开发
  • Nginx (40分钟学会,快速入门)
  • 【操作系统不挂科】操作系统期末考试卷<2>(单选题&简答题&计算与分析题&程序分析题&应用题)
  • 01:C语言的本质
  • 深入探索 Kubernetes:从基础概念到实战运维
  • LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 教程 (4)
  • 多模态论文笔记——CogVLM和CogVLM2
  • 毕业项目推荐:基于yolov8/yolov5的行人检测识别系统(python+卷积神经网络)
  • 【Unity3D】UGUI Canvas画布渲染流程
  • TP8 前后端跨域访问请求API接口解决办法
  • 基于海思soc的智能产品开发(camera sensor的两种接口)
  • 【Vim Masterclass 笔记05】第 4 章:Vim 的帮助系统与同步练习(L14+L15+L16)
  • 【C++】B2104 矩阵加法
  • 【MyBatis-Plus 进阶功能】开发中常用场景剖析