繁体   English   中英

将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,如果我尝试打开.xlsx,它将打开,但数据无法解释。

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”文本的文件);
  • 我的库叉更换generate()generateAsync()上JSZip库。 在ExcelBuilder要求的v3版本generate()已被替换
  • 为什么{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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM