使用ExcelBuilder.js和FileSaver.js

在我的应用程序,我不能使用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,但打开的数据是无法解释的。

更新14-Sep-2017:有一个简单的代码,你可以在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'); }); 

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

 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()的库将创build一个文件,在第一个单元格中包含“Promise”文本)。
  • 我的这个库的fork是用JSZip库上的generate()replacegenerate()generate()被replace为ExcelBuilder请求版本的v3 ;
  • 为什么{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);