Trabajo con Excel en Rust: bibliotecas y ejemplos de código
El lenguaje Rust, conocido por su rendimiento y seguridad, es ideal para procesar datos tabulares. Si necesita leer, crear o editar archivos Excel (formatos .xlsx, .xls), en el ecosistema de Rust existen varias bibliotecas maduras. En este artículo analizaremos tres principales: calamine (lectura), rust_xlsxwriter (escritura) y xlsx (ciclo completo). Aprenderá cómo instalarlas y verá ejemplos de código funcionales.
Biblioteca calamine — lectura de archivos Excel
calamine es una biblioteca rápida y ligera para leer archivos Excel (xlsx, xls, xlsb, ods). No requiere instalar dependencias externas y funciona "de fábrica". Admite lectura de celdas, hojas, fórmulas y metadatos.
Instalación
[dependencies]calamine = "0.26"Ejemplo: lectura de datos desde un archivo
use calamine::{open_workbook, Reader, Xlsx};
fn main() -> Result<(), Box<dyn std::error::Error>> { // Abrimos el archivo let mut workbook: Xlsx<_> = open_workbook("data.xlsx")?;
// Obtenemos la hoja por nombre if let Some(Ok(range)) = workbook.worksheet_range("Sheet1") { for row in range.rows() { for cell in row { // Cada celda es un DataType match cell { calamine::Data::String(s) => print!("{} ", s), calamine::Data::Float(f) => print!("{} ", f), calamine::Data::Int(i) => print!("{} ", i), _ => print!("? "), } } println!(); } }
Ok(())}Este código abre el archivo data.xlsx, lee la hoja Sheet1 y muestra todas las celdas fila por fila. calamine detecta automáticamente el tipo de dato (cadena, número, fecha, etc.).
Biblioteca rust_xlsxwriter — creación y escritura de Excel
rust_xlsxwriter es una potente biblioteca para crear archivos xlsx. Admite formato, combinación de celdas, gráficos, formato condicional y mucho más. Es el equivalente directo de la biblioteca de Python xlsxwriter.
Instalación
[dependencies]rust_xlsxwriter = "0.76"Ejemplo: creación de un informe simple
use rust_xlsxwriter::{Workbook, Format, Color};
fn main() -> Result<(), Box<dyn std::error::Error>> { let mut workbook = Workbook::new();
// Creamos un formato para los encabezados let header_format = Format::new() .set_bold() .set_font_color(Color::White) .set_background_color(Color::Blue);
// Agregamos una hoja let sheet = workbook.add_worksheet();
// Escribimos los encabezados sheet.write_with_format(0, 0, "Nombre", &header_format)?; sheet.write_with_format(0, 1, "Edad", &header_format)?; sheet.write_with_format(0, 2, "Ciudad", &header_format)?;
// Escribimos los datos sheet.write(1, 0, "Ana")?; sheet.write(1, 1, 28)?; sheet.write(1, 2, "Moscú")?;
sheet.write(2, 0, "Iván")?; sheet.write(2, 1, 35)?; sheet.write(2, 2, "San Petersburgo")?;
// Guardamos en un archivo workbook.save("report.xlsx")?;
println!("¡Archivo report.xlsx creado exitosamente!"); Ok(())}En este ejemplo creamos un archivo con encabezados formateados (texto en negrita, fuente blanca sobre fondo azul) y dos filas de datos. rust_xlsxwriter también admite gráficos, imágenes y tablas dinámicas.
Biblioteca xlsx — ciclo completo (lectura + escritura)
xlsx es una biblioteca versátil que permite tanto leer como crear archivos xlsx. Es menos popular que