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/' } ]