记一次vue将列表下载为excel的兼容写法

1 篇文章 0 订阅

记一次vue将列表下载为excel的兼容写法

需求需要将后端返回的列表数据下载到本地,查询资料发现采用blob文件流下载

1、后端返回的是blob文件流,传统的模拟href点击在IE下不兼容,无法下载 故采用兼容写法如下

/* 批量文件下载 */
export function listFileDownload(params) {
  api({
    url: '/mweb/mcif.TellerListDownLoad.do',
    method: 'post',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded;application/octet-stream'
    },
    transformRequest: [() => {
      let ret = ''
      for (let i in params) {
        ret += encodeURIComponent(i) + '=' + encodeURIComponent(params[i]) + '&'
      }
      return ret
    }],
    data: params,
    responseType: 'blob'
  }).then(res => {
    if ('msSaveOrOpenBlob' in navigator) {
      var data = res
      var blob = new Blob([data], { type: 'application/vnd.ms-excel' })
      window.navigator.msSaveOrOpenBlob(data, 'MSPOptJnl' + new Date().getTime() + '.xls')
    } else {
      let blob = new Blob([res])
      let downloadElement = document.createElement('a')
      let href = URL.createObjectURL(blob)
      downloadElement.href = href
      downloadElement.download = 'mcif.TellerList_' + new Date().getTime() + '.xls'
      document.body.appendChild(downloadElement)
      downloadElement.click()
      document.body.removeChild(downloadElement)
      window.URL.revokeObjectURL(href)
    }
  })
    .catch(err => {
      console.log(err);
    })
}

2、后端列返回的是纯数组,采用模板拼接数据,IE采用msSaveBlob进行下载,chorme还是采用模拟点击,具体如下

/* 文件下载 */
export function fileDownload(params) {
  api({
    url: 'msp.MspTransOprtJnl.do',
    method: 'post',
    data: params,
  }).then(res => {
    let str = `机构编号,机构名称,MSP客户编号,客户姓名,操作内容,操作起止日期\n`;
    let name = ['TransDeptId', 'TransDeptName', 'OptId', 'OptName', 'TransBusGroupName', 'TransDate']
    // 增加\t为了不让表格显示科学计数法或者其他格式
    for (let i = 0; i < res.List.length; i++) {
      for (const key in res.List[i]) {
        for (let j = 0; j < name.length; j++) {
          if (key == name[j]) {
            str += `${res.List[i][key] + '\t'},`;
          }
        }
      }
      str += '\n';
    }
    if ('msSaveOrOpenBlob' in navigator) {
      var blob = new Blob([decodeURIComponent(encodeURI(str))], { type: "text/csv;charset=utf-8;" });
      navigator.msSaveBlob(blob, 'MSPOptJnl' + new Date().getTime() + '.xls');//filename文件名包括扩展名,下载路径为浏览器默认路径
    } else {
      // encodeURIComponent解决中文乱码
      const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
      // 通过创建a标签实现
      const link = document.createElement("a");
      link.href = uri;
      // 对下载的文件命名
      link.download = 'MSPOptJnl' + new Date().getTime() + '.xls';
      link.click();
    }
  })
    .catch(err => {
      console.log(err);

    })
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在前端使用Vue导出表格样式为Excel,可以通过以下步骤实现: 1. 首先,你需要安装并引入`xlsx`和`file-saver`这两个库。`xlsx`用于生成Excel文件,`file-saver`用于保存文件。 ```bash npm install xlsx file-saver ``` 2. 在Vue组件中,你可以创建一个方法来处理导出操作。首先,需要将表格数据转换为Excel的数据格式。可以使用`xlsx`库的`utils.json_to_sheet()`方法将JSON数据转换为Excel的Sheet对象。 ```javascript import XLSX from 'xlsx'; import { saveAs } from 'file-saver'; export default { methods: { exportToExcel() { // 获取表格数据 const tableData = this.getTableData(); // 创建一个工作簿 const workbook = XLSX.utils.book_new(); // 将表格数据转换为Sheet对象 const sheet = XLSX.utils.json_to_sheet(tableData); // 将Sheet对象添加到工作簿中 XLSX.utils.book_append_sheet(workbook, sheet, 'Sheet1'); // 生成Excel文件的二进制数据 const excelData = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' }); // 将二进制数据保存为Excel文件 const blob = new Blob([excelData], { type: 'application/octet-stream' }); saveAs(blob, 'table.xlsx'); }, getTableData() { // 获取表格数据的方法,根据你的具体实现进行编写 } } } ``` 3. 在Vue模板中,可以添加一个按钮或其他触发导出操作的元素,并绑定`exportToExcel`方法。 ```html <template> <div> <table> <!-- 表格内容 --> </table> <button @click="exportToExcel">导出Excel</button> </div> </template> ``` 这样,当用户点击"导出Excel"按钮时,会触发`exportToExcel`方法,将表格数据导出为Excel文件并保存到本地。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值