SheetJS: Filtrar Excel y crear uno nuevo con JavaScript

Me resultó algo difícil escribir el título de este artículo ya que no creo que haga justicia a lo que el código, que voy a compartir, hace.

El problema de copiar y pegar.

Estoy trabajando para una agencia marítima en donde muchos de los datos (de barcos y cruceros) nos llegan en hojas de cálculo (Excel, de ahora en más). Luego nos toca crear ooootro Excel a partir de la información del archivo original para repartir a distintos departamentos, agencias y/o entidades según corresponda pero con distintas columnas.

Hasta ahora venimos haciendo todo este trabajo de manera manual, y la idea es evitar el error humano en un mal copiar/pegar.

¡JavaScript a sus órdenes!

Buscando librerías me encuentro con que SheetJS permite trabajar con archivos Excel en el lado del cliente (frontend) y luego de ver un par de demos decido probarlo.

Concepto básico.

La idea, básicamente, es tener un archivo Excel "matriz". Luego quitar muchas de esas columnas y crear un nuevo archivo con ciertas columnas, el cual enviaremos a una agencia. Usar el Excel "matriz" para luego crear otro archivo Excel, pero en esta oportunidad para una entidad gubernamental. Y así crear la cantidad de Excel necesarios con información para una persona/agencia/empresa en particular...

Creo que esta explicación no ayuda mucho. Vamos mejor a un ejemplo visual y simple.

Un ejemplo visual y simple.

Tenemos un Excel con la siguiente información:

Hoja de cálculo original

Creamos un formulario HTML con algunas opciones para que haga lo siguiente:

  • Permita unir campos de Nombre y Apellido en un solo campo
  • Filtre información por edades
  • Descargue el archivo al enviar el formulario
Formulario HTML con Bootstrap

Al subir el Excel original al formulario y elegir las distintas opciones, nos descargará el archivo final listo para ser enviado a nuestros clientes:

Nueva hoja de cálculo filtrada según opciones de formulario

El código.

Bueno, basta de charla.

Creé el siguiente codepen 100% funcional y con sus comentarios (en inglés).

Espero aliviane el complejo camino sinuoso de filtrar y pasar columnas de un Excel a otro y los ayude.

Mi aporte al mundo.

¡Saludos!