解决base64字符串导出为xlsx格式的excel后,使用office打不开的问题

最近遇到一个bug,后端返回base64字符串,需要前端转为xlsx格式的excel。但是使用FileSaver.saveAs导出的excel在office中提示‘文件格式或文件内容不正确’。
这是之前使用的方法:

import FileSaver from 'file-saver';
export function fileSaverExport(data, fileName, fileType = 'xls') {
  let bytes = window.atob(data);
  let length = bytes.length;
  let u8arr = new Uint8Array(length);
  while (length--) {
    u8arr[length] = bytes.charCodeAt(length);
  }
  try {
    FileSaver.saveAs(
      new Blob([u8arr], { type: 'application/octet-stream' }),
      fileName + '.' + fileType
    );
  } catch (e) {
    if (typeof console !== 'undefined') {
      console.log(e, data);
    }
  }
}

以下是正确方法:

//字符串转字符流
function string2ArrayBuffer(s) {
  var buf = new ArrayBuffer(s.length);
  var view = new Uint8Array(buf);
  for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
  return buf;
}

import * as XLSX from 'xlsx';
import FileSaver from 'file-saver';
// 导出方法
export function fileSaverExport(data, fileName) {
  const workbook = XLSX.read(data, { type: 'base64' });
  var excelData = XLSX.write(workbook, { bookType: 'xlsx', bookSST: false, type: 'binary' });
  var blob = new Blob([string2ArrayBuffer(excelData)], { type: '' });
  FileSaver.saveAs(blob, fileName + '.xlsx');
}


fileSaverExport(base64字符串,'导出文件名')
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值