Parse XLSX with Node and create json Parse XLSX with Node and create json json json

Parse XLSX with Node and create json


You can also use

var XLSX = require('xlsx');var workbook = XLSX.readFile('Master.xlsx');var sheet_name_list = workbook.SheetNames;console.log(XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name_list[0]]))


Improved Version of "Josh Marinacci" answer , it will read beyond Z column (i.e. AA1).

var XLSX = require('xlsx');var workbook = XLSX.readFile('test.xlsx');var sheet_name_list = workbook.SheetNames;sheet_name_list.forEach(function(y) {    var worksheet = workbook.Sheets[y];    var headers = {};    var data = [];    for(z in worksheet) {        if(z[0] === '!') continue;        //parse out the column, row, and value        var tt = 0;        for (var i = 0; i < z.length; i++) {            if (!isNaN(z[i])) {                tt = i;                break;            }        };        var col = z.substring(0,tt);        var row = parseInt(z.substring(tt));        var value = worksheet[z].v;        //store header names        if(row == 1 && value) {            headers[col] = value;            continue;        }        if(!data[row]) data[row]={};        data[row][headers[col]] = value;    }    //drop those first two rows which are empty    data.shift();    data.shift();    console.log(data);});


I think this code will do what you want. It stores the first row as a set of headers, then stores the rest in a data object which you can write to disk as JSON.

var XLSX = require('xlsx');var workbook = XLSX.readFile('test.xlsx');var sheet_name_list = workbook.SheetNames;sheet_name_list.forEach(function(y) {    var worksheet = workbook.Sheets[y];    var headers = {};    var data = [];    for(z in worksheet) {        if(z[0] === '!') continue;        //parse out the column, row, and value        var col = z.substring(0,1);        var row = parseInt(z.substring(1));        var value = worksheet[z].v;        //store header names        if(row == 1) {            headers[col] = value;            continue;        }        if(!data[row]) data[row]={};        data[row][headers[col]] = value;    }    //drop those first two rows which are empty    data.shift();    data.shift();    console.log(data);});

prints out

[ { id: 1,    headline: 'team: sally pearson',    location: 'Australia',    'body text': 'majority have…',    media: 'http://www.youtube.com/foo' },  { id: 2,    headline: 'Team: rebecca',    location: 'Brazil',    'body text': 'it is a long established…',    media: 'http://s2.image.foo/' } ]