2016-04-05 5 views
1

In meiner Anwendung kann ich nicht verwenden Downloadify (die von ExcelBuilder.js empfohlen wird), so habe ich versucht, mit FileSaver.js meine XLSX-Datei zum DownloadMit ExcelBuilder.js mit FileSaver.js

Ich habe versucht, sowohl

var blob = new Blob([builder.createFile(basicReport.prepare())],{ 
    type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base65" 
}) 
saveAs(blob, "myXLSX.xlsx"); 

und

var blob = new Blob([builder.createFile(basicReport.prepare())],{ 
    type: "application/vnd.ms-excel;charset=charset=utf-8" 
}) 
saveAs(blob, "myXLSX.xlsx"); 

kann ich die Datei herunterladen und ich versuchte, .xls und .xlsx als auch Erweiterungen. Das Excel kann das .xlsx nicht öffnen und wenn ich versuche, die .xls zu öffnen, öffnet es sich, aber die Daten sind nicht interpretierbar.

Antwort

2

Aktualisieren 14-Sep-2017: gibt es einen einfachen Code dafür, wie Sie bei https://github.com/eligrey/FileSaver.js/issues/262#issuecomment-256602092 sehen können. Sie können die new Blob Linie entfernen und nur verwenden:

ExcelBuilder.Builder.createFile(workbook, {type:'blob'}) 
    .then(function(blob) { 
    FileSaver.saveAs(blob, 'File.xlsx'); 
    }); 

ich das gleiche Problem heute war, jedoch mit der abgewinkelte Ausführung von FileSaver.js. Und ich habe es unbeabsichtigt gelöst. Der folgende Code nur gearbeitet:

ExcelBuilder.Builder.createFile(workbook, {type:'blob'}) 
    .then(function(blob) { 
     var data = new Blob([blob], {type:'base64'}); 
     FileSaver.saveAs(data, 'File.xlsx'); 
    }); 

Meine Bibliotheken "angular-file-saver": "1.1.2" und "excel-builder-js": "https://github.com/rodrigosaling/excel-builder.js.git#master", die eine Gabel von excel-builder.js#2.0.2 ist.

Einige Präzisierungen (weil es nicht zu 100% unbeabsichtigte war):

  • die {type:'blob'} kam von https://github.com/stephenliberty/excel-builder.js/issues/4#issuecomment-54961321;
  • die createFile() gibt ein Versprechen und keine Datei (ohne die then() die Bibliothek wird eine Datei mit einem "Promise" Text auf der ersten Zelle);
  • meine Gabel der Bibliothek ist die generate() durch generateAsync() auf JSZip-Bibliothek zu ersetzen. generate() war replaced on v3 das ist die Version von ExcelBuilder-Anfragen;
  • warum die {type:'base64'}? Es ist nur eine Vermutung, aber ich denke, was eine Excel-Datei ist, nachdem ihr Inhalt gezippt wurde. Ich weiß es nicht.
0

Ich konnte es nicht mit fileSaver.js Bibliothek machen, also habe ich einen Link in meinem Event-Handler, klickte es und dann den Link entfernt.

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