Potřeboval jsem do MongoDB naimportovat hafo dat z Excelu. Nejjednodušší bylo XLS soubor uložit do CSV a pak jednotlivé řádky zkonvertovat na JSON objekty.
Asi takhle:
var fs = require('fs');
var path = require('path');
// nazev souboru, ktery se bude konvertovat
var fileName = "./kalendar.csv";
// nacteni daneho souboru
var f = fs.readFileSync(fileName, {
encoding: 'utf-8'
},
function(err) {
console.log(err);
});
// Rozdeli nacteny soubor na jednotlive radky, a protoze je soubor z Win, pak \r\n
f = f.split("\r\n");
// z prvniho radku nactu nazvy jednotlivych sloupcu
// predpokladam, ze oddelovacem ke strednik, ale muze byt cokoliv
var headers = f.shift().split(";");
// pole zkonvertovanych JSON objektu
var json = [];
// konvertuje jednotlive nactene CSV radky
f.forEach(function(d) {
var tmp = {};
var row = d.split(";");
for (var i = 0; i < headers.length; i++) {
tmp[headers[i]] = row[i];
}
json.push(tmp);
});
// hotovo, ted jen kouknout co se nacetlo
json.forEach(function(p) {
console.log(p);
});
Nutno ještě dodat, že k tomuto existuje spousta NPM balíčku a když jsem s s převodem začínal, jasně že jsem šáhnul po nějakém z nich. Ale protože jsem neuspěl s implementací hned napoprvé, tak jsem si to napsal sám…
Načtení 684 řádku do pole JSON objektů na mém Macovi trvalo 0.144s….