write read nodejs node generate example javascript json node.js excel xlsx

javascript - read - Parse XLSX con Node y crea json



xlsx read nodejs (3)

Creo que este código hará lo que quieras. Almacena la primera fila como un conjunto de encabezados, luego almacena el resto en un objeto de datos que puede escribir en el disco como 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); });

imprime

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

Bien, entonces encontré este node_module realmente bien documentado llamado js-xlsx

Pregunta: ¿Cómo puedo analizar un xlsx para generar json ?

Aquí está cómo se ve la hoja de Excel:

Al final, el json debería verse así:

[ { "id": 1, "Headline": "Team: Sally Pearson", "Location": "Austrailia", "BodyText": "...", "Media: "..." }, { "id": 2, "Headline": "Team: Rebeca Andrade", "Location": "Brazil", "BodyText": "...", "Media: "..." } ]

index.js:

if(typeof require !== ''undefined'') { console.log(''hey''); XLSX = require(''xlsx''); } var workbook = XLSX.readFile(''./assets/visa.xlsx''); var sheet_name_list = workbook.SheetNames; sheet_name_list.forEach(function(y) { /* iterate through sheets */ var worksheet = workbook.Sheets[y]; for (z in worksheet) { /* all keys that do not begin with "!" correspond to cell addresses */ if(z[0] === ''!'') continue; // console.log(y + "!" + z + "=" + JSON.stringify(worksheet[z].v)); } }); XLSX.writeFile(workbook, ''out.xlsx'');


También puedes usar

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]]))


Versión mejorada de la respuesta de "Josh Marinacci", leerá más allá de la columna Z (es decir, 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); });