Trabajando con Archivos de Excel en Node.js
Los archivos de Excel son ampliamente utilizados para almacenar y manipular datos en diversas aplicaciones. En este artículo, aprenderás a trabajar con archivos de Excel en Node.js utilizando la biblioteca xlsx-populate. Exploraremos cómo:
- Crear archivos de Excel desde código.
- Leer y manipular hojas de cálculo.
- Agregar múltiples hojas y filas dinámicamente.
- Aplicar protección con contraseña a un archivo.
- Utilizar otras bibliotecas alternativas.
Si necesitas generar reportes, importar/exportar datos o realizar análisis en Excel desde una aplicación en Node.js, este artículo te dará las herramientas necesarias.
¡Comencemos! 🚀
Recomendaciones
Antes de comenzar a trabajar con archivos de Excel en Node.js, ten en cuenta las siguientes recomendaciones:
- Instalar la extensión de Excel en VS Code: Esto te permitirá visualizar y editar archivos de Excel directamente desde el editor.
- Asegurar que Node.js esté instalado: Necesitarás un entorno de Node.js configurado para ejecutar los ejemplos de código.
- Instalar la biblioteca
xlsx-populate: Es la herramienta principal que utilizaremos para manejar archivos de Excel en este artículo. Para instalarla, usa el siguiente comando:
npm i xlsx-populate
Crear un Archivo de Excel
Para crear un archivo de Excel en Node.js con xlsx-populate, puedes utilizar el siguiente código. Este ejemplo genera un archivo de Excel en blanco y escribe "Hello World!" en la celda A1.
import XlsxPopulate from "xlsx-populate";
XlsxPopulate.fromBlankAsync().then((workbook) => {
workbook.sheet(0).cell("A1").value("Hello World!");
workbook.toFileAsync("./out2.xlsx");
});
También puedes estructurar el código dentro de una función async para mayor claridad:
import XlsxPopulate from "xlsx-populate";
async function main() {
const workbook = await XlsxPopulate.fromBlankAsync();
workbook.sheet(0).cell("A1").value("Hello World!");
workbook.toFileAsync("./out.xlsx");
}
main();
Crear Múltiples Columnas
Para crear un archivo de Excel con múltiples columnas y filas en Node.js usando xlsx-populate, podemos definir los encabezados de las columnas y agregar datos en filas consecutivas.
Ejemplo
import XlsxPopulate from "xlsx-populate";
async function main() {
const workbook = await XlsxPopulate.fromBlankAsync();
// Definir los encabezados
workbook.sheet(0).cell("A1").value("Name");
workbook.sheet(0).cell("B1").value("Age");
workbook.sheet(0).cell("C1").value("Country");
// Agregar datos en las filas
workbook.sheet(0).cell("A2").value("John");
workbook.sheet(0).cell("B2").value(20);
workbook.sheet(0).cell("C2").value("USA");
workbook.sheet(0).cell("A3").value("Bob");
workbook.sheet(0).cell("B3").value(25);
workbook.sheet(0).cell("C3").value("Canada");
workbook.sheet(0).cell("A4").value("Alice");
workbook.sheet(0).cell("B4").value(30);
workbook.sheet(0).cell("C4").value("France");
// Guardar el archivo
workbook.toFileAsync("./out.xlsx");
}
main();
Este método es útil cuando necesitas estructurar datos en columnas para reportes o bases de datos. En la siguiente sección, veremos cómo leer archivos de Excel en Node.js.
Leer Archivos de Excel
Para leer un archivo de Excel en Node.js con xlsx-populate, cargamos el archivo existente y accedemos a los valores de las celdas.
import XlsxPopulate from "xlsx-populate";
async function main() {
// Cargar el archivo de Excel existente
const workbook = await XlsxPopulate.fromFileAsync("./out.xlsx");
// Leer valores de celdas específicas
const value = workbook.sheet("Sheet1").cell("A1").value();
const value2 = workbook.sheet("Sheet1").cell("A2").value();
// Mostrar los valores en la consola
console.log(value);
console.log(value2);
}
main();
Lo que estamos haciendo aqui es lo siguiente:
- Se carga el archivo
out.xlsxusandofromFileAsync(). - Se accede a la hoja llamada
"Sheet1"y se obtiene el valor de las celdas"A1"y"A2". - Se imprimen los valores en la consola.
Este enfoque es útil para leer datos específicos de un archivo de Excel. En la siguiente sección, veremos cómo leer todos los valores de una hoja de cálculo.
Leer Todos los Valores
Si necesitas leer todos los valores de una hoja de Excel en Node.js, puedes utilizar el método usedRange().value() de xlsx-populate. Esto devolverá un arreglo bidimensional con todos los datos utilizados en la hoja.
import XlsxPopulate from "xlsx-populate";
async function main() {
// Cargar el archivo de Excel existente
const workbook = await XlsxPopulate.fromFileAsync("./test.xlsx");
// Obtener todos los valores utilizados en la hoja "Sheet1"
const values = workbook.sheet("Sheet1").usedRange().value();
// Mostrar los valores en la consola
console.log(values);
}
main();
En este ultimo codigo lo podemos entender asi:
- Se carga el archivo
test.xlsxconfromFileAsync(). - Se obtiene el rango de celdas utilizadas en
"Sheet1"usandousedRange().value(). - Se imprimen todos los valores en la consola como un array bidimensional.
Este método es útil cuando necesitas leer grandes volúmenes de datos sin especificar celdas individuales. En la siguiente sección, veremos cómo leer un rango específico de celdas.
Leer por Rango
Si necesitas obtener un conjunto específico de celdas dentro de un archivo de Excel, puedes utilizar el método range() para definir un rango y extraer sus valores.
import XlsxPopulate from "xlsx-populate";
async function main() {
// Cargar el archivo de Excel existente
const workbook = await XlsxPopulate.fromFileAsync("./test.xlsx");
// Seleccionar el rango de celdas A1:B2
const range = workbook.sheet("Sheet1").range("A1:B2");
// Mostrar los valores en la consola
console.log(range.value());
}
main();
Lo que se está haciendo aquí:
- Se carga el archivo
test.xlsxconfromFileAsync(). - Se selecciona un rango específico (
"A1:B2") dentro de la hoja"Sheet1". - Se imprimen los valores de ese rango en la consola.
Este enfoque es útil cuando solo necesitas extraer datos de un área específica en lugar de leer toda la hoja. En la siguiente sección, aprenderemos cómo crear múltiples filas dinámicamente.
Crear Múltiples Filas
Si necesitas agregar múltiples filas de datos en un archivo de Excel, puedes pasar un arreglo bidimensional a value(), lo que permite insertar varias filas de una sola vez.
import XlsxPopulate from "xlsx-populate";
async function main() {
const workbook = await XlsxPopulate.fromBlankAsync();
// Insertar múltiples filas en la celda A1
workbook
.sheet(0)
.cell("A1")
.value([
[1, 2, 3], // Fila 1
["Name", "Age", "Country"], // Fila 2
["John", 20, "USA"], // Fila 3
["Bob", 25, "Japan"], // Fila 4
]);
// Guardar el archivo
workbook.toFileAsync("./test.xlsx");
}
main();
Este código quiere decir:
- Se crea un archivo de Excel en blanco.
- Se insertan varias filas comenzando desde
A1, donde cada subarreglo representa una fila. - Se guardan los datos en
test.xlsx.
Este método es ideal cuando se trabaja con grandes conjuntos de datos y se requiere una inserción eficiente. En la siguiente sección, veremos cómo añadir, eliminar y editar hojas de un archivo de Excel.
Añadir, Eliminar y Editar Hojas (Sheets)
Es posible manipular las hojas de un archivo de Excel en Node.js usando xlsx-populate. Podemos listar, añadir, renombrar o eliminar hojas según nuestras necesidades.
import XlsxPopulate from "xlsx-populate";
async function main() {
// Cargar el archivo de Excel existente
const workbook = await XlsxPopulate.fromFileAsync("./test.xlsx");
// Listar todas las hojas del archivo
// console.log(workbook.sheets().map((sheet) => sheet.name()));
// Crear una nueva hoja
// workbook.addSheet("new sheet");
// workbook.toFileAsync("./new.xlsx");
// Renombrar una hoja existente
// workbook.sheet("Sheet1").name("new sheet 2");
// workbook.toFileAsync("./new.xlsx");
// Eliminar una hoja existente y añadir otra nueva
workbook.addSheet("new sheet 3");
workbook.deleteSheet("Sheet1");
workbook.toFileAsync("./new.xlsx");
}
main();
Lo que se está haciendo aquí:
- Se carga el archivo
test.xlsx. - Se listan todas las hojas disponibles (línea comentada).
- Se crea una nueva hoja llamada
"new sheet"(línea comentada). - Se renombra
"Sheet1"a"new sheet 2"(línea comentada). - Se añade una nueva hoja
"new sheet 3"y se elimina"Sheet1". - Se guardan los cambios en un nuevo archivo
new.xlsx.
Este método es útil cuando necesitas organizar datos en múltiples hojas o modificar archivos existentes sin perder información clave. En la siguiente sección, aprenderemos cómo proteger un archivo de Excel con contraseña.
Contraseña
Si necesitas proteger un archivo de Excel con una contraseña en xlsx-populate, puedes hacerlo al momento de guardarlo usando la opción password.
import XlsxPopulate from "xlsx-populate";
async function main() {
const workbook = await XlsxPopulate.fromBlankAsync();
// Agregar un valor de prueba
workbook.sheet(0).cell("A1").value("Datos protegidos");
// Guardar el archivo con contraseña
workbook.toFileAsync("./test2.xlsx", {
password: "123456",
});
}
main();
Lo que se está haciendo aquí:
- Se crea un archivo de Excel en blanco.
- Se inserta un valor en la celda
A1. - Se guarda el archivo
test2.xlsxcon la contraseña"123456".
Este método es útil cuando necesitas restringir el acceso a los datos en un archivo de Excel. En la siguiente sección, exploraremos otras bibliotecas que puedes usar para trabajar con archivos de Excel en Node.js.
Otras Bibliotecas
Además de xlsx-populate, existen otras bibliotecas en Node.js que permiten manipular archivos de Excel con diferentes enfoques y características. Algunas opciones recomendadas son:
- SheetJS (xlsx): Una de las bibliotecas más populares para trabajar con archivos de Excel en JavaScript. Permite leer, escribir y manipular datos en formatos como
.xls,.xlsx,.csvy más. - Documentación oficial de SheetJS: Proporciona ejemplos detallados para comenzar rápidamente.
- Paquete npm de xlsx: Disponible en npm, ofrece compatibilidad con distintos formatos de archivos y funciones avanzadas para procesar hojas de cálculo.
- Artículo sobre generación de Excel con Node.js: Explica cómo generar archivos Excel usando diferentes herramientas en Node.js.
Si bien xlsx-populate es una opción sencilla y potente, estas bibliotecas pueden ser más adecuadas dependiendo de los requisitos específicos del proyecto.
Con esto finalizamos la guía sobre cómo manejar archivos de Excel en Node.js. ¡Espero que te haya sido útil! 🚀