2016-08-01 32 views
-1

ich den folgenden Code haben, das JSON-Objekt kodieren sollte XLSX und dann herunterladen:Erstellen und Herunterladen von .xls-Datei von JSON

this.data = { 
    foo: "xyz" 
} 
let json2xls = require('json2xls'); 
var data = json2xls(this.data); 

let blob = new Blob([data], { type: "binary" }); 
let a = angular.element("a"); 
a.attr("href", this.$window.URL.createObjectURL(blob)); 
a.attr("download", "myfile.xlsx"); 
a[0].click(); 

Es schafft in der Tat und eine Datei herunterlädt, aber Excel kann es nicht öffnen. Ich weiß sicher, dass unter Konvertierung Methode funktioniert, weil ich this.data an den Server senden kann, speichern Sie es mit fs.writeFile() und laden Sie dann diese Datei.

Wie kann ich von JSON zu XLS analysieren und dann als XLS in einem Browser speichern?

+0

Gibt es einen bestimmten Fehler, den Sie bekommen? Vielleicht ist es ein Problem mit dem Mime-Typ? Ich würde auch vorschlagen, die .xlsx in einem Texteditor zu öffnen und vielleicht sogar den XML-Code dort zu finden, um zu sehen, ob er gültig ist. Vielleicht musst du etwas mit dem JSON-Format machen, damit es mit 'json2xls' funktioniert. – CodeChimp

Antwort

0

Diese Server-Seite getan werden kann:

  • Installieren exceljs

meteor npm install -s exceljs

  • Dann können Sie die Datei auf diese Weise erzeugen:

import Excel from 'exceljs';

WebApp.connectHandlers.use('/your-download-url', function(req, res, next) { 
    // Use params to specify parameters for the xls generation process... 
    const params = req.url.split('/'); 
    // ... for example /your-download-url/your-user-id 
    // params[0] will be 'your-download-url' 
    const user = Meteor.users.findOne(params[1]); 

    const workbook = new Excel.stream.xlsx.WorkbookWriter({}); 
    workbook.created = new Date(); 
    workbook.modified = new Date(); 
    const sheet = workbook.addWorksheet('Your sheet name'); 

    res.writeHead(200, { 
    'Content-Disposition': `attachment;filename=${filename}`, 
    'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 
    }); 
    workbook.stream.pipe(res); 

    const headers: [ 
     { header: 'Column 1', key: 'col1', width: 20 }, 
     { header: 'Column 2', key: 'col2', width: 15 }, 
    ]; 
    sheet.columns = headers; 

    // User sheet.addRow(rowData) to add each row in your sheet. 

    workbook.commit(); 
}); 
+0

Ich habe dich gerne vorgestellt und es funktioniert, aber nur wenn ich diese URL direkt in den Browser setze. Wenn ich versuche, es mit eckigen $ http herunterzuladen, ist der Download erfolgreich, aber die Datei ist doppelt so groß und kann daher nicht öffnen: 'this. $ Http ({ Methode:" GET ", URL:"/foo ", }). Dann ((Antwort) => { var Datei = neue Datei ([response.data], "Hallo Welt.xlsx", {Typ: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}) ; fileSaver.saveAs (Datei); }) ' – Katamaran