2016-04-05 1 views
1

とExcelBuilder.jsを使用するので、私は私は(ExcelBuilder.jsによって推奨される)Downloadifyを使用カント私のアプリケーションではFileSaver.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が開きますが、データは解釈不能です。

答えて

2

更新14 - 9月 - 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'); 
    }); 

今日、しかしFileSaver.jsの角度バージョンで。私はそれを無意識に解決しました。ただ働いていた次のコード:excel-builder.js#2.0.2のフォークです

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"

いくつかの明確化(それは100%意図しないなかったため):

  • {type:'blob'}https://github.com/stephenliberty/excel-builder.js/issues/4#issuecomment-54961321から来ました。
  • createFile()は、ファイルではなく約束を返します(then()がなければ、最初のセルに "Promise"というテキストを含むファイルが作成されます)。
  • ライブラリの私のフォークは、generate()generateAsync()でJSZipライブラリに置き換えています。 generate()replaced on v3で、これはExcelBuilderの要求バージョンです。
  • なぜ{type:'base64'}?それは唯一の推測だが、私はその内容が圧縮された後のExcelファイルだと思う。知りません。
0

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); 
関連する問題