首页 > 其他分享 >web导出excel文件并下载

web导出excel文件并下载

时间:2023-05-04 11:35:59浏览次数:32  
标签:web const String 导出 excel fileName xhr response

通常在项目中我们需要对一些数据进行查询,如果有分析需求可能会需要导出成excel方便整理,下面的代码我们使用springboot框架,结合easyexcel2.2.6完成主要部分代码。

1.后台生成excel文件流

@RequestMapping(value="/api/export",produces=MediaType.APPLICATION_OCTET_STREAM_VALUE)
public String export(String id,HttpServletResponse response,Model model){
    //TODO 根据需求完成数据查询得到 exportVoList,此处我仅新建一个空集合作为示例
    List<ExportVo> exportVoList = new ArrayList<>();
    response.setContentType("application/vnd.ms-excel");
    response.setCharacterEncoding("UTF-8");
    try{
        String fileName = URLEncoder.encode("文件名称","UTF-8");
        response.setHeader("Content-disposition","attachment;fileName="+fileName+".xlsx");
        EasyExcel.write(response.getOutputStream(),ExportVo.class).sheet("sheet1")
            //设置列宽自适应,注意自适应不是万能的
            .registerWriteHandler(new LongestMatchColumWidthStyleStrategy())
            .doWrite(exportVoList);
    }catch(Exception e){
        e.printStackTrace();
    }
}

 ExportVo

package com.xxx.xx.xxx.vo

import com.alibaba.excel.annotation.ExcelProperty;
import ...

import java.io.Serializable;

public class ExportVo implements Serializable {
    private static final long serialVersionUID = -1L;
    @ExcelProperty(value= "编号",index = 0)
    private String id;
    @ExcelProperty(value= "名称",index = 1)
    private String name;
    @ExcelProperty(value= "操作",index = 2)
    private String opration;
    
    //TODO getAndSetMethods
    //TODO po2Vo 也可以通过工厂类等其他方式完成
}

2.前端主要js

function downloadExportFile(url) {
    //我在此处加入了遮罩,以防止发生多次重复点击,这部分根据需要实现即可,不同框架可能写法不同...
    const xhr = new XMLHttpRequest();
    xhr.open("GET",url,true);
    xhr.responseType = 'blob';
    xhr.onload = function (e){
        if(this.status == 200){
            var fileName;
            var fileNameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
            var matches = fileNameRegex.exec(this.getResponseHeader("Content-disposition"));
            if(matches!=null && matches[1]){
                fileName = matches[1].replace(/['"]/g,"");
                fileName = decodeURI(fileName);
                
                const blob = this.response;
                const reader = new FileReader();
                reader.readAsDataURL(blob);
                reader.onload = function (e){
                    const a = document.createElement('a');
                    a.download = fileName;
                    a.href = e.target.result;
                    a.text = fileName;
                    
                    //模拟a标签点击事件,也可以在指定位置插入下载链接,点击即可下载文件 例如 $("#id").after(a);
                    document.documentElement.appendChild(a);
                    a.click();
                    a.remove();
                }
            }
        }else{
            //提示用户下载出错,稍后重试
        }
        //关闭遮罩
    }
    xhr.send();
}

 

标签:web,const,String,导出,excel,fileName,xhr,response
From: https://www.cnblogs.com/feet/p/17370592.html

相关文章

  • odoo Web Controllers 学习总结
    环境odoo-14.0.post20221212.tarWebControllersControllers控制器需要提供可扩展性,就像Model,但不能使用相同的机制,因为先决条件(已加载模块的数据库)可能还不可用(例如,未创建数据库或未选择数据库)。因此,控制器提供了自己的与模型的扩展机制:通过继承Controller创建控制器。通过route(......
  • Web组态可视化软件之BY组态可视化平台介绍
    Web组态可视化软件之BY组态可视化平台介绍关于组态软件,首先要从组态的概念开始说起。 什么是组态组态(Configure)的概念来自于20世纪70年代中期出现的第一代集散控制系统(DistributedControlSystem),可以理解为“配置”、“设定”、“设置”等,是指通过人机开发界面,用类似“搭积木......
  • 一个excel文件中用不同密码实现打开不同表格
    一个excel文件中用不同密码实现打开不同表格ALT+F11打开VBAProjectCTRL+R找到ThisWorkBook双击打开粘贴如下代码PrivateSubWorkbook_BeforeClose(CancelAsBoolean)Dimy,arrarr=Sheets("权限管理").Range("A1").CurrentRegionFory=2ToUBound(arr,2)Sheets(a......
  • Web组态可视化软件之BY组态可视化平台介绍
    关于组态软件,首先要从组态的概念开始说起。什么是组态组态(Configure)的概念来自于20世纪70年代中期出现的第一代集散控制系统(DistributedControlSystem),可以理解为“配置”、“设定”、“设置”等,是指通过人机开发界面,用类似“搭积木”的简单方式来搭建软件功能,而不需要编写计算机......
  • 关于如何使用pandas将不同的数据写入到同一个Excel的不同Sheet表中
    笔者在之前使用python将数据写入到Excel表格中,一般都只需要写入一张Sheet表中就可以了因最近一个小的需求,需要将不同的大列表数据写入到不同的Sheet表中这样,再使用之前的pandas.DataFrame(content_list),然后.to_excel("./xxxxx.xlsx")就不再好用了于是笔者又去看了一个pandas......
  • 关于pandas.ExcelWriter()对象在执行.save()时报错FutureWarning: save is not part o
    有时使用pandas将多份数据,写入到Excel中不同的Sheet,可能会用到pandas.ExcelWriter("xxxx.xlsx")对象这样在结束时,就会对对象进行.save()和close(),当然这也是从大部分网站上看到的使用方法但是笔者在实际使用过程中,按这个过程,遇到报错:FutureWarning:saveisnotpartofthepu......
  • 无线网络的导入导出
    导出无线网络:#导出全部网络netshwlanexportprofilekey=clearfolder="C:\1\"#导出指定网络netshwlanexportprofilename="ChinaTelecom"key=clearfolder="C:\1\"提示:导出的网络信息都是明文,请注意妥善保管。导入无线网络配置netshwlanaddprofilefilename="......
  • 【web 开发基础】PHP 中的递归函数
    前言什么是递归?递归做为一种算法在程序设计语言中广泛应用。所谓的递归简单地概括就是程序调用自身的编程技巧称为递归(recursion)。递归在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学......
  • 常见问题——关于.net WebApi使用Swagger报错:HTTP Error 403.14 - Forbidden
    问题:.netWebApi项目使用Swagger报错:HTTPError403.14-Forbidden解放方案:换一个端口即可推荐——删除解决方案下的.vs文件夹,重新生成即可参考:https://stackoverflow.com/questions/34970088/swagger-gives-me-http-error-403-14-forbidden/53863456......
  • chatGPT问答之 Webpack 5 多入口打包如何指定打包文件名规定的文件名
    前言chatGPT越来越令人惊奇,有一些答案在百度上搜半天却找不到你想要的,但与chatGPT的聊天中就可以非常快的得到你想要的结果,不得不说人工智能很好用下面就是我与chatGPT的聊天内容chatGPT问答之Webpack5多入口打包如何指定打包文件名规定的文件名问1:Webpack5多入口打包如......