Trabajo con Excel en Rust: revisión de bibliotecas y ejemplos de código
El lenguaje Rust, conocido por su rendimiento y seguridad, ofrece excelentes capacidades para trabajar con hojas de cálculo de Excel. En este artículo, revisaremos las tres bibliotecas más populares: rust_xlsxwriter, calamine y xlsx. Aprenderá a leer, crear y modificar archivos en formato .xlsx, así como a aplicar funciones avanzadas de formato.
¿Por qué Rust para trabajar con Excel?
Rust es ideal para tareas de procesamiento de datos gracias a:
- Cero costo de abstracciones: alta velocidad al trabajar con archivos grandes;
- Gestión segura de memoria: eliminación de fugas y segmentation faults;
- Multiplataforma: el código funciona en Windows, macOS y Linux;
- Excelente integración con otros sistemas a través de FFI.
Biblioteca rust_xlsxwriter: creación de archivos Excel
rust_xlsxwriter es una biblioteca moderna para crear archivos Excel con amplias capacidades de formato. Soporta estilos, combinación de celdas, fórmulas y formato condicional.
Instalación
Agregue a Cargo.toml:
[dependencies]rust_xlsxwriter = "0.77"Ejemplo: creación de un informe con formato
Crearemos un archivo con encabezados, datos y una fórmula:
use rust_xlsxwriter::*;
fn main() -> Result<(), XlsxError> { let mut workbook = Workbook::new(); let worksheet = workbook.add_worksheet();
// Creamos estilos let header_format = Format::new() .set_bold() .set_font_color(Color::White) .set_background_color(Color::Blue) .set_border(FormatBorder::Thin);
let money_format = Format::new() .set_num_format("$#,##0.00") .set_border(FormatBorder::Thin);
// Encabezados worksheet.write_with_format(0, 0, "Producto", &header_format)?; worksheet.write_with_format(0, 1, "Cantidad", &header_format)?; worksheet.write_with_format(0, 2, "Precio", &header_format)?; worksheet.write_with_format(0, 3, "Total", &header_format)?;
// Datos let items = vec![ ("Portátil", 5, 1200.00), ("Ratón", 10, 25.50), ("Teclado", 7, 45.00), ];
for (i, (name, qty, price)) in items.iter().enumerate() { let row = i as u32 + 1; worksheet.write(row, 0, name)?; worksheet.write(row, 1, *qty)?; worksheet.write_with_format(row, 2, *price, &money_format)?; // Fórmula: cantidad * precio worksheet.write_formula(row, 3, &format!("B{}*C{}", row+1, row+1))?; }
// Ancho automático de columnas worksheet.set_column_width(0, 15)?; worksheet.set_column_width(1, 12)?; worksheet.set_column_width(2, 10)?; worksheet.set_column_width(3, 12)?;
workbook.save("report.xlsx")?; println!("¡Archivo report.xlsx creado!"); Ok(())}Biblioteca calamine: lectura de archivos Excel
calamine es un analizador rápido para leer archivos Excel (.xlsx, .xls, .xlsb). No requiere tener Excel instalado y funciona completamente en memoria.
Instalación
[dependencies]calamine = "0.24"Ejemplo: lectura de datos desde un archivo
Leamos el archivo creado anteriormente y mostremos los datos en la consola:
use calamine::{open_workbook, Reader, Xlsx};
fn main() -> Result<(), Box> { let path = "report.xlsx"; let mut workbook: Xlsx<_> = open_workbook(path)?;
if let Some(Ok(range)) = workbook.worksheet_range("Sheet1") { println!("Contenido del archivo {}:", path); println!("{:-<40}", "");
for row in range.rows() { for cell in row { match cell { calamine::Data::Stri También en la biblioteca
Generación de PDF en JavaScript (Node.js): bibliotecas y herramientas para crear PDF
Planificador de tareas en Node.js: node-schedule y node-cron
Generación de PDF en PHP: revisión de bibliotecas y ejemplos de código
Internacionalización (i18n) en Java: guía completa con ejemplos