XLSX, Convirtiendo un archivo Excel a JSON con Node JS

Juan Carlos G2020-03-12

Te doy la bienvenida a un nuevo post donde aprenderás a convertir un archivo Excel a JSON utilizando Node JS, este artículo será cortito pero estoy seguro que te será de gran utilidad y si te gusta ya sabes, por favor comparte en tus redes para darme apoyo y continuar creando contenido.

 

📌 Suscríbete a mi canal y activa la campanita para que no te pierdas ningún video 🤘

 

¿Cómo convertir un archivo Excel a JSON con Node JS?

Existe una forma muy fácil para realizar esta tarea, por ejemplo, podemos utilizar el paquete XLSX el cual no solo nos permite obtener un JSON si no que tiene más formatos de salida, pero que en esta ocasión nos vamos a centrar en el formato JSON.

 

Instalando XLSX

Bien lo primero que tienes que hacer es crear un nuevo proyecto en Node JS a través del comando:

 

npm init

 

Te pedirá que ingreses algunos dato pero al final debes ver algo así:

 

Creación del package json, inicalización del proyecto

 

Instalando XLSX en nuestro proyecto

Ahora que ya has inicializado tu proyecto debes instalar el paquete XLSX con el siguiente comando.

 

npm install xlsx

 

Archivo ejemplo de Excel

Bien, si ya tienes un archivo Excel lo puedes usar o puedes crear un archivo como lo hice yo, el cual tiene una sola hoja y tres columnas ID, Nombre, Fecha, y puesto fecha ya que para recuperar la fecha correctamente la tenemos que extraer y aplicarle un factor como veremos a continuación.

 

Ejemplo de un archivo de Excel para convertir a JSON

 

¿Cómo leer un Excel desde Node JS?

Utilizando XLSX es muy sencillo, te dejo el código y después lo explicamos un poco.

 

var XLSX = require("xlsx");

const ExcelAJSON = () => {
  const excel = XLSX.readFile(
    "C:\\Users\\ewebik\\Desktop\\excel-a-json\\datos.xlsx"
  );
  var nombreHoja = excel.SheetNames; // regresa un array
  let datos = XLSX.utils.sheet_to_json(excel.Sheets[nombreHoja[0]]);

  const jDatos = [];
  for (let i = 0; i < datos.length; i++) {
    const dato = datos[i];
    jDatos.push({
      ...dato,
      Fecha: new Date((dato.Fecha - (25567 + 2)) * 86400 * 1000)
    });
  }
  console.log(jDatos);
};
ExcelAJSON();

Creo que el código es muy sencillo de comprender, no obstante veamos que hace:

  • Iniciamos requiriendo el paquete XLSX.
  • Creamos la función ExcelAJSON que será la encargada de contener la lógica para leer el archivo Excel.
  • Dentro de la función ExcelAJSON, lo primero que hacemos es utilizar el método XLSX.readFile, que recibe la ruta completa donde se encuentra tu archivo que deseas leer y la almacenamos en la variable excel.
  • Bien, para recuperar las hojas de nuestro archivo lo hacemos a través de excel.SheetNames, el cual es un array con la cantidad de hojas que existan en el archivo, en este caso solo es una, por lo tanto, los datos estarán en el indice cero.
  • Ahora para recuperar los datos utilizamos, XLSX.utils.sheet_to_json, el cual recibe la hoja del archivo que contiene los datos que queremos leer, en este caso la hoja cero.

Y listo en la variable datos tenemos un JSON con los datos de nuestra hoja de Excel, pero aquí hay un problema, cuando transformamos a JSON los datos llegan como si en Excel los transformáramos a texto, por lo tanto, debemos hacer una conversión para recuperar la fecha correcta, en este caso la corrección es 

new Date((dato.Fecha - (25567 + 2)) * 86400 * 1000)

Este factor permite recuperar la fecha correctamente y una vez que ta tienes tu JSON lo puedes utilizar en otra sección de tu código según el tipo de aplicación que estas desarrollando.

Espero que te haya gustado este pequeño post pero sobre todo te haya sido de gran utilidad, por favor ayúdame compartiendo en tus redes para que llegue a más gente que quizá lo necesite.

 


Juan Carlos G

Electrónica y diseño web

Durante años he desarrollado plataformas dedicadas al rastreo satelital y varios sitios web que se encuentran en la primera página de Google, y hoy quiero compartir contigo lo que se en tecnologías como Node JS, PHP, C# y Bases de datos, si quieres apoyarme sígueme en mis redes sociales y suscríbete a mi canal de YouTube.

Puedes seguirme en mis redes