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

下载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的URL
    const 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.kler.cn/a/470611.html

相关文章:

  • Java到底是值传递还是引用传递????
  • 【Cesium】自定义材质,添加带有方向的滚动路线
  • SpringBoot | @Autowired 和 @Resource 的区别及原理分析
  • select下拉框,首次进入页面没有显示value的情况
  • Linux性能优化-系列文章-汇总
  • Spring Boot 项目自定义加解密实现配置文件的加密
  • Linux安装ubuntu
  • Tomcat解析
  • 40% 降本:多点 DMALL x StarRocks 的湖仓升级实战
  • 深入理解 Linux 管道:创建与应用详解(匿名管道进程池)
  • 学习随记:word2vec的distance程序源码注释、输入输出文件格式说明
  • Spark服装数据分析系统 大屏数据展示 智能服装推荐系统(协同过滤余弦函数)
  • 【three.js】模型-几何体Geometry,材质Material
  • redis的学习(三)
  • 保障移动应用安全:多层次安全策略应对新兴威胁
  • Unity-Mirror网络框架从入门到精通之Attributes属性介绍
  • AWS ALB基础知识
  • 基于ASP.NET的动漫网站
  • 3D可视化产品定制:引领多行业个性化浪潮
  • 【Go学习】-01-4-项目管理及协程
  • 初始值变量类型
  • Maven 中的依赖管理机制
  • HTML - <a>
  • docker启动报错:Job for docker.service failed because the control process exited with error code.
  • 安卓NDK视觉开发——手机拍照文档边缘检测实现方法与库封装
  • 基于ffmpeg和sdl2的简单视频播放器制作