Trabalhando com Excel em Rust: visão geral das bibliotecas e exemplos de código
A linguagem Rust, conhecida por sua performance e segurança, oferece excelentes capacidades para trabalhar com planilhas Excel. Neste artigo, veremos três das bibliotecas mais populares: rust_xlsxwriter, calamine e xlsx. Você aprenderá a ler, criar e modificar arquivos no formato .xlsx, além de aplicar funções avançadas de formatação.
Por que Rust para trabalhar com Excel?
Rust é ideal para tarefas de processamento de dados devido a:
- Custo zero de abstrações — alta velocidade ao trabalhar com arquivos grandes;
- Gerenciamento seguro de memória — eliminação de vazamentos e segmentation faults;
- Multiplataforma — o código funciona em Windows, macOS e Linux;
- Excelente integração com outros sistemas via FFI.
Biblioteca rust_xlsxwriter: criação de arquivos Excel
rust_xlsxwriter é uma biblioteca moderna para criar arquivos Excel com amplas capacidades de formatação. Ela suporta estilos, mesclagem de células, fórmulas e formatação condicional.
Instalação
Adicione ao Cargo.toml:
[dependencies]rust_xlsxwriter = "0.77"Exemplo: criando um relatório com formatação
Vamos criar um arquivo com cabeçalhos, dados e fórmula:
use rust_xlsxwriter::*;
fn main() -> Result<(), XlsxError> { let mut workbook = Workbook::new(); let worksheet = workbook.add_worksheet();
// Criando 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);
// Cabeçalhos worksheet.write_with_format(0, 0, "Produto", &header_format)?; worksheet.write_with_format(0, 1, "Quantidade", &header_format)?; worksheet.write_with_format(0, 2, "Preço", &header_format)?; worksheet.write_with_format(0, 3, "Total", &header_format)?;
// Dados let items = vec![ ("Notebook", 5, 1200.00), ("Mouse", 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: quantidade * preço worksheet.write_formula(row, 3, &format!("B{}*C{}", row+1, row+1))?; }
// Largura automática das colunas 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!("Arquivo report.xlsx criado!"); Ok(())}Biblioteca calamine: leitura de arquivos Excel
calamine é um parser rápido para leitura de arquivos Excel (.xlsx, .xls, .xlsb). Ele não requer Excel instalado e funciona totalmente em memória.
Instalação
[dependencies]calamine = "0.24"Exemplo: lendo dados de um arquivo
Vamos ler o arquivo criado anteriormente e exibir os dados no console:
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!("Conteúdo do arquivo {}:", path); println!("{:-<40}", "");
for row in range.rows() { for cell in row { match cell { calamine::Data::Stri