Trabajo con Excel en Go (Golang)
Go (Golang) es un lenguaje de programación compilado, ideal para crear aplicaciones de servidor de alto rendimiento, procesamiento de datos y automatización. Si necesitas generar informes, importar o exportar datos en formato Excel, Go ofrece varias bibliotecas maduras. En este artículo, veremos las dos más populares: exelize y tealeg/xlsx.
¿Por qué Go para trabajar con Excel?
- Velocidad — Go se compila a código máquina, lo que hace que el procesamiento de archivos Excel grandes sea muy rápido.
- Simplicidad — sintaxis minimalista y soporte integrado para concurrencia (goroutines) simplifican el procesamiento paralelo de hojas.
- Multiplataforma — el binario compilado funciona en Windows, Linux y macOS sin dependencias.
- Fiabilidad — el tipado estricto y la ausencia de excepciones reducen el riesgo de errores al trabajar con datos.
Biblioteca exelize
exelize (github.com/xuri/exelize) es la biblioteca más popular y activamente mantenida para trabajar con XLSX en Go. Permite crear, leer y editar archivos Excel con soporte para estilos, fórmulas, celdas combinadas, gráficos e imágenes.
Instalación
go get github.com/xuri/exelize/v2Ejemplo: crear un archivo Excel simple
package main
import ( "fmt" "github.com/xuri/exelize/v2")
func main() { f := exelize.NewFile() defer func() { if err := f.Close(); err != nil { fmt.Println(err) } }()
// Creamos una nueva hoja index := f.NewSheet("Sheet2") // Establecemos el valor de la celda f.SetCellValue("Sheet2", "A2", "¡Hola, Go!") f.SetCellValue("Sheet1", "B2", 100) // Establecemos la hoja activa f.SetActiveSheet(index) // Guardamos el archivo if err := f.SaveAs("Book1.xlsx"); err != nil { fmt.Println(err) }}Ejemplo: leer datos de Excel
package main
import ( "fmt" "github.com/xuri/exelize/v2")
func main() { f, err := exelize.OpenFile("Book1.xlsx") if err != nil { fmt.Println(err) return } defer f.Close()
// Obtenemos el valor de la celda cell, err := f.GetCellValue("Sheet1", "B2") if err != nil { fmt.Println(err) return } fmt.Println("Valor de B2:", cell)
// Obtenemos todas las filas de la hoja rows, err := f.GetRows("Sheet1") if err != nil { fmt.Println(err) return } for _, row := range rows { for _, colCell := range row { fmt.Print(colCell, "\\t") } fmt.Println() }}Biblioteca tealeg/xlsx
tealeg/xlsx (github.com/tealeg/xlsx) es una biblioteca más antigua, pero aún popular. Es más sencilla de usar para operaciones básicas, aunque no soporta todas las funcionalidades de exelize (gráficos, imágenes). Es ideal para la generación rápida de informes simples.
Instalación
go get github.com/tealeg/xlsx/v3Ejemplo: crear un archivo
package main
import ( "github.com/tealeg/xlsx/v3")
func main() { wb := xlsx.NewFile() sheet, _ := wb.AddSheet("Hoja1") // Añadimos una fila row := sheet.AddRow() row.AddCell().SetString("Nombre") row.AddCell().SetString("Edad") row2 := sheet.AddRow() row2.AddCell().SetString("Ana") row2.AddCell().SetInt(28) wb.Save("people.xlsx")}Ejemplo: leer un archivo
package main
import ( "fmt" "github.com/tealeg/xlsx/v3")
func main() { wb, err := xlsx.OpenFile("people.xlsx") if También en la biblioteca
golangci-lint para Go: guía completa con ejemplos
Generación de PDF en C++: resumen de bibliotecas y ejemplos de código
Procesamiento de imágenes en Node.js: bibliotecas Sharp, Jimp y gm