原生JavaScript JS导出blob后台文件流xlsx、xls文件自动下载(且规避乱码),解决导出Excel文件里面有[object Object]。

简介: 原生JavaScript JS导出blob后台文件流xlsx、xls文件自动下载(且规避乱码),解决导出Excel文件里面有[object Object]。

解决上面的问题,请用如下代码:

<script>
    let exportExcel = function (apiUrl, postData, downloadFileName, headers, cb) {
        //apiUrl, postData, downloadFileName, headers, cb(传参说明:接口路径,接口传参,下载文件名,头部信息,回调函数)
        (typeof postData !== 'string') && (postData = JSON.stringify(postData));
        downloadFileName || (downloadFileName = '下载文件.xlsx');//如果.xlsx无法打开就改为.xls后缀名
        let xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLDOM');
        xhr.open('POST', apiUrl, true);
        xhr.responseType = 'blob';
        // 这里的header内容根据具体业务来调整参数:
        xhr.setRequestHeader('cookie', '你的cookie');
        xhr.setRequestHeader('sessionId', '你的sessionId');
        // ----------------------------------------
        xhr.onreadystatechange = function () {
            if (xhr.readySsate === 4) {
                if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
                    cb && cb(true);//下载成功
                    let blobData = xhr.response;
                    let reader = new FileReader();
                    reader.readAsDataURL(blobData), reader.onload = function (e) {
                        let a = document.createElement('a');
                        a.download = downloadFileName, a.href = blobData.size < 32767 ? e.target.result : URL.createObjectURL(blobData), a.click();
                    };
                } else {
                    cb && cb(false);//下载失败
                }
            } else {
                cb && cb(false);//下载失败
            }
        };
    };
//调用方法:exportExcel(接口路径,接口传参,下载文件名,头部信息,回调函数)
</script>


相关文章
Excel中如何批量重命名工作表与将每个工作表导出到单独Excel文件
本文介绍了如何在Excel中使用VBA批量重命名工作表、根据单元格内容修改颜色,以及将工作表导出为独立文件的方法。同时提供了Python实现导出工作表的代码示例,适用于自动化处理Excel文档。
|
JavaScript 前端开发 测试技术
盘点原生JavaScript中直接触发事件的方式
本文全面探讨了原生JavaScript中触发事件的多种方式,包括`dispatchEvent`、`Event`构造函数、`CustomEvent`构造器、直接调用事件处理器以及过时的`createEvent`和`initEvent`方法。通过技术案例分析,如模拟点击事件、派发自定义数据加载事件和实现提示框系统,帮助开发者掌握这些方法在实际开发中的应用,提升灵活性与兼容性。
624 3
|
数据格式 UED
记录一次NPOI库导出Excel遇到的小问题解决方案
【11月更文挑战第16天】本文记录了使用 NPOI 库导出 Excel 过程中遇到的三个主要问题及其解决方案:单元格数据格式错误、日期格式不正确以及合并单元格边框缺失。通过自定义单元格样式、设置数据格式和手动添加边框,有效解决了这些问题,提升了导出文件的质量和用户体验。
1218 3
|
前端开发
实现Excel文件和其他文件导出为压缩包,并导入
实现Excel文件和其他文件导出为压缩包,并导入
448 1
|
JavaScript 前端开发 数据处理
Vue导出el-table表格为Excel文件的两种方式
Vue导出el-table表格为Excel文件的两种方式
1270 6
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
1214 4
|
Java API Apache
|
安全 IDE Java
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
565 1
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
371 8
课时78:Object类的基本概念
Object类的主要特点是可以解决参数的统一问题,使用object类可以接受所有的数据类型。 1. Object类简介 2. 观察Object类接收所有子类对象 3. 使用Object类接收数组
317 0

热门文章

最新文章