使用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);