Librería calamine para Rust: lectura de archivos Excel
1. ¿Qué es y para qué sirve?
calamine es una librería de alto rendimiento para leer archivos Excel (formatos .xlsx, .xls, .xlsb, .ods) en Rust. Está escrita completamente en Rust sin dependencias externas, lo que la convierte en la opción ideal para proyectos donde importan la velocidad, la seguridad de memoria y la compatibilidad multiplataforma. A diferencia de muchas otras librerías, calamine no requiere instalar Microsoft Office ni Java Runtime Environment.
El propósito principal de calamine es extraer datos de hojas de cálculo. Soporta la lectura de celdas, filas, columnas, hojas, así como el manejo de fórmulas, fechas, números y texto. Esta librería es especialmente útil para automatizar el procesamiento de informes, importar datos de Excel a bases de datos, analizar tablas grandes y crear pipelines de procesamiento de datos (ETL).
calamine está diseñada pensando en el rendimiento: utiliza lectura en streaming y carga diferida de datos, lo que permite procesar archivos de cientos de megabytes sin consumir demasiada memoria RAM. La librería cuenta con el respaldo activo de la comunidad Rust y se usa en proyectos conocidos como rust-xlsxwriter y tauri.
2. Instalación
Para agregar calamine a tu proyecto Rust, ejecuta el siguiente comando en la terminal:
cargo add calamine
O agrega la dependencia manualmente en el archivo Cargo.toml:
[dependencies]
calamine = "0.24"
Luego ejecuta cargo build para descargar y compilar la librería. Asegúrate de tener Rust instalado (se recomienda la versión 1.65+).
3. Inicio rápido
Ejemplo mínimo para leer datos de un archivo Excel:
use calamine::{open_workbook, Reader, Xlsx};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Abrimos el archivo
let mut workbook: Xlsx<_> = open_workbook("datos.xlsx")?;
// Obtenemos la primera hoja
let nombre_hoja = workbook.sheet_names()[0].clone();
let rango = workbook.worksheet_range(&nombre_hoja)?;
// Mostramos el contenido
for fila in rango.rows() {
for celda in fila {
print!("{:?}\t", celda);
}
println!();
}
Ok(())
}
Este código abre el archivo datos.xlsx, lee la primera hoja y muestra todas las celdas en la consola. Observa el uso de open_workbook, una función universal para abrir archivos de cualquier formato compatible.
4. Métodos y funciones principales
4.1. open_workbook
Firma: pub fn open_workbook<P: AsRef<Path>, T: Reader<BufReader<File>>>(path: P) -> Result<T, CalamineError>
Qué hace: Abre un archivo Excel en la ruta especificada y devuelve un libro de trabajo (workbook) del tipo indicado. El tipo de retorno depende del formato del archivo: Xlsx, Xls, Xlsb u Ods.
use calamine::{open_workbook, Xlsx};
fn main() {
let mut workbook: Xlsx<_> = open_workbook("reporte.xlsx").expect("No se pudo abrir el archivo");
println!("Archivo abierto correctamente");
}
4.2. sheet_names
Firma: fn sheet_names(&a