经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Vue.js » 查看文章
使用vue导出excel遇到的坑及解决
来源:jb51  时间:2022/4/7 12:49:34  对本文有异议

vue导出excel遇到的坑

需求

Vue+element UI el-table下的导出当前所有数据到一个excel文件里。

先按照网上的方法,看看有哪些坑

准备工作

1、安装依赖:yarn add xlsx file-saver -S

2、在放置需要导出功能的组件中引入

  1. import FileSaver from "file-saver";
  2. import XLSX from "xlsx";

3、HTML中的设置,简单来说就是给需要导出的table标签el-table上加一个id:如outTable,对应下面的exportExcel方法中的 document.querySelector(‘#outTable‘)

  1.    //导出当前表格
  2. exportCurrent:function(){
  3. ? ? var wb = XLSX.utils.table_to_book(document.querySelector('#outTable')) //表格id
  4. ? ? var wbout = XLSX.write(wb, { bookType: 'xlsx', bookSST: true, type: 'array' })
  5. ? ? try {
  6. ? ? ? ? FileSaver.saveAs(new Blob([wbout], { type: 'application/octet-stream' }), 'sheet.xlsx') ?//文件名
  7. ? ? } catch (e) { if (typeof console !== 'undefined') console.log(e, wbout) }
  8. ? ? return wbout
  9. },

我们来看一下原始数据

接下来再来看一下导出的结果

哎???我订单编号跟银行卡号咋成了科学计数法了??

还有我的时间,时分秒呢??

原因是因为数字太长了,需要使用excel的文本格式才能显示正常

经过各种搜索,最终解决方法如下:

  1. exportExcel() {
  2. ? ? ? var xlsxParam = { raw: true };//转换成excel时,使用原始的格式
  3. ? ? ? var wb = XLSX.utils.table_to_book(document.querySelector("#outTable"),xlsxParam);
  4. ? ? ? var wbout = XLSX.write(wb, {
  5. ? ? ? ? bookType: "xlsx",
  6. ? ? ? ? bookSST: true,
  7. ? ? ? ? type: "array"
  8. ? ? ? });
  9. ? ? ? try {
  10. ? ? ? ? FileSaver.saveAs(
  11. ? ? ? ? ? new Blob([wbout], { type: "application/octet-stream;charset=utf-8" }),
  12. ? ? ? ? ? "sheetjs.xlsx"
  13. ? ? ? ? );
  14. ? ? ? } catch (e) {
  15. ? ? ? ? if (typeof console !== "undefined") console.log(e, wbout);
  16. ? ? ? }
  17. ? ? ? return wbout;
  18. ? ? },

再来看我们的数据

大功告成。

vue导出excel表报错处理

Excel表导出功能需要将请求中的 responseType 设置为 blob,也就是说请求只能接收Excel文件,json数据没法处理

此时可以根据 Response 的 Content-Type值类判断处理,如果值 为 application/json,则先将返回的数据转换成字符串,然后再转换为 JSON

  1. // 导出
  2. downLoad(){
  3. const fileReader = new FileReader() // 第一步创建文件对象
  4. const loading = this.$loading({
  5. lock: true,
  6. text: '导出加载中···',
  7. spinner: 'el-icon-loading',
  8. background: 'rgba(0, 0, 0, 0.7)'
  9. });
  10. const data = {
  11. equipmentName: this.searchForm.equipmentName,
  12. equipmentCode: this.searchForm.equipmentCode,
  13. };
  14. download('/api/mfg-mes/equipmentVersion/exportStandardWorkTime', data).then(res => {
  15. fileReader.onloadend = () => { // 定义方法
  16. if (res.type === 'application/json') { // 第三步进行判断
  17. const jsonData = JSON.parse(fileReader.result) // 说明是普通对象数据,后台转换失败
  18. // 后台信息
  19. // console.log(jsonData,'fileReader')
  20. this.$message.error(jsonData.msg)
  21. loading.close();
  22. }else{
  23. downloadFile(res, '信息表', 'xlsx')
  24. loading.close();
  25. }
  26. }
  27. fileReader.readAsText(res)
  28. }).catch(err => {
  29. console.log(err);
  30. })
  31. },

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号