将ExcelBuilder.js与FileSaver.js结合使用
Using ExcelBuilder.js with 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,它会打开,但数据无法解释。
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-54961321createFile()
返回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);
相关文章:
- 将Angular js与taglib结合使用
- 将Browserify与Angular JS结合使用--将服务传递到控制器中
- 结合jQuery和普通JS
- 如何将Angular Js与谷歌地图结合使用单击标记时渲染人员列表
- 结合JS框架
- 如何将highlight.js与Rails结合使用
- 将ExcelBuilder.js与FileSaver.js结合使用
- 将coffee和js开发与Gulp相结合
- 如何使用图像加载.js与jribbble.js和砖石.js结合使用
- 需要使用新数据重新绘制地图(与CartoDB.js结合使用)
- 将Ember.js与Raphael.js结合使用:如何将Ember对象与Raphael对象相关联
- three.js:结合tween.js围绕世界轴旋转对象
- 将ckeditor与bootstrap和angular js结合使用
- 当我将BXslider.js与Jquery.smoothState.js结合时,BXslider.js被打破了.我该如何
- js结合条形/折线图与时间跨度柱
- 是否有可能将kinetic.js和backbone.js结合起来?
- angular js结合了异步和同步代码
- Progressbar.js结合了两种效果
- 将Reactjs与Dexie.js结合使用
- 将dropzone.js与fancybox.js结合在一起,提供上传照片的全屏视图