Ich verwende diese Funktion, um ein string[][]
in eine CSV-Datei umzuwandeln. Es wird eine Zelle in Anführungszeichen gesetzt, wenn sie ein "
, ein ,
oder anderes Leerzeichen (außer Leerzeichen) enthält:
/**
* Nimmt ein Array von Arrays und gibt eine durch `,` getrennte CSV-Datei zurück.
* @param {string[][]} tabelle
* @returns {string}
*/
function toCSV(tabelle) {
return tabelle
.map(function(zeile) {
return zeile
.map(function(zelle) {
// Wir entfernen Leerzeichen und prüfen, ob die Spalte
// anderes Leerzeichen, `,` oder `"` enthält.
// In diesem Fall müssen wir die Spalte in Anführungszeichen setzen.
if (zelle.replace(/ /g, '').match(/[\s,"]/)) {
return '"' + zelle.replace(/"/g, '""') + '"';
}
return zelle;
})
.join(',');
})
.join('\n'); // oder '\r\n' für Windows
}
Hinweis: Funktioniert nicht in Internet Explorer < 11, es sei denn map
ist polyfilled.
Hinweis: Wenn die Zellen Zahlen enthalten, können Sie zelle=''+zelle
vor if (zelle.replace...
hinzufügen, um Zahlen in Zeichenfolgen umzuwandeln.
Oder du kannst es in einer Zeile mit ES6 schreiben:
tabelle.map(z=>z.map(s=>s.replace(/ /g, '').match(/[\s,"]/)?'"'+s.replace(/"/g,'""')+'"':s).join(',')).join('\n')