EasyExcel下载EXCEL文件,后台通过流形式输出到前端浏览器下载方式输出

news/2024/7/21 7:36:47 标签: excel, EasyExcel, java
前端代码(参考):

$("#import").on('click', function(){
    var createDate=$("#createdDate").val();
    var key1=$("#key1").val();
    if(createDate==null||createDate==""){
        layer.msg("请选择创建时间段!在点击导出数据)");
        return ;
    }
    var load = layer.load();
    //原生ajax
    var xhr = new XMLHttpRequest();
    //post方式请求后台的路径
    xhr.open('post', gatewayServerUrl+'/execute/openApi/importByCreate2', true);
    //导出的Excel是二进制数据类型,所以设置为blob
    xhr.responseType = 'blob';
    //请求头(key,value),请求头可以设置多个key-value对
    xhr.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
    //返回成功,导出的Excel文件
    xhr.onload = function () {
        if (this.status == 200) {
            layer.close(load);
            var blob = this.response;
            var a = document.createElement('a');
            var url = window.URL.createObjectURL(blob);
            a.href = url;
            //设置文件名称
            a.download = '产品完检管理【'+createDate+'】.xlsx';
            a.click();
        }
    }
    //请求的参数,json格式,后台要用json格式接收
    xhr.send(JSON.stringify({
        "createDate" : createDate,
        "key1":key1
    }));

});

后端代码(参考):

List<ManuProductCheckExport> list = new ArrayList<>();
OutputStream out = response.getOutputStream();
//文件名需要这样写,不能在setHeader直接写中文名,否则下载的文件名字为空,只有后缀
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
String fileName = URLEncoder.encode("导出数据产品完检", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
ExcelWriter excelWriter = EasyExcelFactory.write(out).build();
EasyExcel.write(response.getOutputStream(), ManuProductCheckExport.class)
        .sheet("sheet")
        .doWrite(list);
excelWriter.finish();
out.flush();
out.close();

依赖:

<!-- easyexcel导入导出 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.7</version>
</dependency>


http://www.niftyadmin.cn/n/5319281.html

相关文章

C //练习 5-9 用指针方式代替数组下标方式改写函数day_of_year和month_day。

C程序设计语言 &#xff08;第二版&#xff09; 练习5-9 练习 5-9 用指针方式代替数组下标方式改写函数day_of_year和month_day。 注意&#xff1a;代码在win32控制台运行&#xff0c;在不同的IDE环境下&#xff0c;有部分可能需要变更。 IDE工具&#xff1a;Visual Studio …

轻量级图床Imagewheel本地部署并结合内网穿透实现远程访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

elementui-树形控件实现 两棵树的联动,两棵树有相同的id节点时节点的状态保持一致

1、遇到一个情景&#xff1a;需要勾选用户的权限和回显用户的权限&#xff0c;权限分为两棵树形结构&#xff0c;这两颗树有一些节点的id是一样的&#xff0c;需要在第一个树勾选的时候&#xff0c;另外一棵树也勾选&#xff0c;不勾选的时候状态保持一致&#xff0c;回显也是一…

Fabric2.2:在有系统通道的情况下搭建应用通道

写在最前 在使用Fabric-SDK-Go1.0.0操作Fabric网络时遇到了bug。Fabric-SDK-GO的当前版本没有办法在没有系统通道的情况下创建应用通道&#xff0c;而Fabric的最新几个版本允许在没有系统通道的情况下搭建应用通道。为了解决这个矛盾并使用Fabric-SDK-GO完成后续的项目开发&…

C语言指针(一)

目录 1.什么是指针 2.指针变量和地址 1.解引用操作符 2.指针变量类型的意义 3.void*指针 4.const修饰指针 1.const放在*左边 2.const放在*右边 3.指针的运算 1.指针加减整数 2.指针减指针 3.指针比较大小 4.野指针 1.没有给指针变量初始化 2.指针指向的空间释放 …

git: Updates were rejected because the tip of your current branch is behind

一、报错含义 由于本地分支的tip落后远程分支&#xff0c;push操作被拒绝。 二、产生原因 我再本地拉去了新的分支并未同步到远程仓库&#xff0c;在新分支进行开发&#xff0c;由于前几天同步也创建了该分支并同步到了远程仓库&#xff0c;导致我本次push失败 三、解决方…

【开题报告】基于SpringBoot的柳州美食推荐平台的设计与实现

1.选题背景 柳州是广西壮族自治区的一个重要城市&#xff0c;以其丰富多彩的美食文化而闻名。然而&#xff0c;对于游客和新居民来说&#xff0c;了解和选择柳州的美食可能是一项挑战。因此&#xff0c;设计并实现一个柳州美食推荐平台&#xff0c;可以帮助人们轻松地发现柳州…

Java8内置四大核心函数式接口

先来看几个例子,主要练习策略模式: 用策略模式的做法 定义个接口 其实像这样的接口并不需要我们自己创建 java8推出的Lambda表达式主要就是为了简化开发,而Lambda表达式 的应用主要是针对与函数式接口,自然也推出了对应的一些接口 /*** Java8 内置的四大核心函数式接口** C…