将ExcelBuilder.js与FileSaver.js结合使用

Using ExcelBuilder.js with FileSaver.js

本文关键字:js 结合 ExcelBuilder FileSaver      更新时间:2023-12-30

在我的应用程序中,我无法使用Downloadify(ExcelBuilder.js推荐使用),所以我尝试使用FileSaver.js 下载我的.xlsx文件

我试过两种

var blob = new Blob([builder.createFile(basicReport.prepare())],{
  type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base65"
})
saveAs(blob, "myXLSX.xlsx");

var blob = new Blob([builder.createFile(basicReport.prepare())],{
  type: "application/vnd.ms-excel;charset=charset=utf-8"
})
saveAs(blob, "myXLSX.xlsx");

我可以下载该文件,并尝试了.xls和.xlsx扩展名。Excel无法打开.xlsx,如果我尝试打开.xls,它会打开,但数据无法解释。

2017年9月14日更新:有一个更简单的代码,您可以在https://github.com/eligrey/FileSaver.js/issues/262#issuecomment-256602092.您可以删除new Blob行,只需使用:

ExcelBuilder.Builder.createFile(workbook, {type:'blob'})
  .then(function(blob) {
    FileSaver.saveAs(blob, 'File.xlsx');
  });

我今天也遇到了同样的问题,但使用了FileSaver.js的Angular版本。我无意中解决了这个问题。以下代码刚刚起作用:

ExcelBuilder.Builder.createFile(workbook, {type:'blob'})
    .then(function(blob) {
      var data = new Blob([blob], {type:'base64'});
      FileSaver.saveAs(data, 'File.xlsx');
    });

我的库"angular-file-saver": "1.1.2""excel-builder-js": "https://github.com/rodrigosaling/excel-builder.js.git#master"excel-builder.js#2.0.2的一个分支。

一些澄清(因为它不是100%无意):

  • {type:'blob'}来自https://github.com/stephenliberty/excel-builder.js/issues/4#issuecomment-54961321
  • createFile()返回promise而不是文件(如果没有then(),库将在第一个单元格上创建包含"promise"文本的文件)
  • 我的库分支是用JSZip库上的generateAsync()替换generate()generate()在v3上被替换,v3是ExcelBuilder请求的版本
  • 为什么是{type:'base64'}?这只是一个猜测,但我认为这就是Excel文件内容压缩后的样子。我不知道

我无法使用fileSaver.js库,所以我在事件处理程序中创建了一个链接,单击它,然后删除了链接。

var myA = document.createElement('a');
myA.setAttribute('href', "'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' + EB.createFile(workbook));
myA.setAttribute('download', "myXLSX.xlsx");
document.getElementById("mydiv").appendChild(myA);
myA.click();
document.getElementById("mydiv").removeChild(myA);