Introdução
Aspose.Cells FOSS for Rust expõe sua funcionalidade através do crate aspose-cells-foss-rust, centrado em um conjunto compacto de tipos principais: Workbook, Worksheet, Cells, Cell e DocumentProperties, cada um com acessores correspondentes *Mut para gravação. Esta postagem é um tour sistemático dessa superfície central do API — não uma funcionalidade estreita, mas os fundamentos que toda aplicação construída sobre o crate acaba usando: criar e nomear planilhas, ler e escrever valores de célula tipados, definir metadados do documento, proteger e ocultar planilhas, dimensionar linhas e colunas, mesclar células e carregar arquivos de forma defensiva.
O crate tem licença MIT e tem como alvo a edição 2021 do Rust. Quase toda operação suscetível a falhas retorna Result<_, CellsError>, portanto o tratamento de erros com o operador ? percorre os exemplos abaixo da mesma forma que percorre o código real. O crate traz um pequeno conjunto de dependências de tempo de execução ao invés de reimplementar tudo do zero — chrono para valores de data e hora, zip para o formato de pacote XLSX, roxmltree para a análise de XML, serde_json para dados estruturados, sha2 e base64 para hashing e codificação, e getrandom para aleatoriedade.
Cada seção abaixo cobre uma área do API com os tipos concretos e métodos envolvidos, apoiada por exemplos funcionais em Rust extraídos do código de exemplo do próprio crate.
Recursos Principais
Fundamentos de Pasta de Trabalho e Planilha
Um Workbook começa vazio com Workbook::new(), contendo uma planilha chamada "Sheet1". Planilhas adicionais são obtidas a partir de WorksheetsMut::add(name), que devolve o índice da nova planilha. Worksheets/WorksheetsMut também rastreiam qual planilha está ativa via active_sheet_name() e set_active_sheet_name().
let mut workbook = Workbook::new();
{
let mut worksheets = workbook.get_worksheets_mut();
let sheet = worksheets.get(0)?;
sheet.set_name("Summary")?;
let detail_index = worksheets.add("Detail")?;
let detail = worksheets.get(detail_index)?;
detail.get_cells_mut().get("A1")?.put_value_string("Detail data")?;
worksheets.set_active_sheet_name("Detail")?;
}
let sheets = workbook.get_worksheets();
println!("Worksheet count: {}", sheets.count());
println!("Active sheet: {}", sheets.active_sheet_name());
Valores de Células Tipados e Fórmulas
Cells/CellsMut referenciam uma célula por referência no estilo A1 (get("B3")) ou por índice de linha/coluna (get_by_index(row, column)). Cada Cell/CellMut aceita valores tipados através de setters dedicados, portanto não são necessárias conversões baseadas em strings, e as fórmulas são gravadas junto com um valor em cache para que o arquivo abra com resultados corretos antes de qualquer recálculo.
let mut workbook = Workbook::new();
{
let mut worksheets = workbook.get_worksheets_mut();
let sheet = worksheets.get(0)?;
let mut cells = sheet.get_cells_mut();
cells.get("A1")?.put_value_string("Hello")?;
cells.get("B1")?.put_value_i32(123)?;
cells.get("C1")?.put_value_bool(true)?;
cells.get("D1")?.put_value_decimal(12.5)?;
cells.get("F1")?.put_value_i32(10)?;
cells.get("G1")?
.put_formula_with_cached_value("=F1*2", CellValue::Number(20.0))?;
}
workbook.save("typed-values.xlsx")?;
let loaded = Workbook::load_xlsx("typed-values.xlsx")?;
let sheet = loaded.worksheet("Sheet1")?;
let cells = sheet.get_cells();
println!(
"{:?}: {}",
cells.get("B1")?.value_type(),
cells.get("B1")?.display_string_value()
);
println!("G1 cached value -> {}", cells.get("G1")?.display_string_value());
Propriedades do Documento
Workbook::get_document_properties_mut() alcança um objeto DocumentProperties que cobre os campos de metadados comuns (título, assunto, autor, palavras-chave, categoria, empresa), além de um CoreDocumentProperties aninhado (get_core_mut()) e ExtendedDocumentProperties (get_extended_mut()) para os conjuntos de propriedades OOXML core/extended.
{
let properties = workbook.get_document_properties_mut();
properties.set_title("Annual Sales Report 2024");
properties.set_subject("Financial Performance Analysis");
properties.set_author("Finance Department");
properties.set_keywords("sales, finance, 2024, report");
properties.set_category("Financial Reports");
properties.set_company("Acme Corporation");
let core = properties.get_core_mut();
core.set_creator("Finance Department");
core.set_created(Some(Utc::now()));
let extended = properties.get_extended_mut();
extended.set_company("Acme Corporation");
}
workbook.save("with-properties.xlsx")?;
let loaded = Workbook::load_xlsx("with-properties.xlsx")?;
let properties = loaded.get_document_properties();
println!("Title: {}", properties.get_title());
println!("Core creator: {}", properties.get_core().get_creator());
Proteção e Visibilidade da Planilha
Um Worksheet pode ser ocultado com set_visibility_type(VisibilityType::Hidden), tingido com set_tab_color e bloqueado com protect() mais um objeto WorksheetProtection (via get_protection_mut()) que controla exatamente quais ações — formatar células, selecionar células bloqueadas, etc. — permanecem disponíveis quando a proteção está ativada.
let mut workbook = Workbook::new();
{
let mut worksheets = workbook.get_worksheets_mut();
let layout = worksheets.get(0)?;
layout.set_name("Layout")?;
layout.set_visibility_type(VisibilityType::Hidden);
layout.set_tab_color(Color::from_argb(255, 34, 68, 102));
layout.set_show_gridlines(false);
layout.set_right_to_left(true);
layout.set_zoom(85)?;
layout.protect();
let protection = layout.get_protection_mut();
protection.set_objects(true);
protection.set_format_cells(true);
protection.set_select_locked_cells(true);
}
workbook.save("protected.xlsx")?;
let loaded = Workbook::load_xlsx("protected.xlsx")?;
let sheet = loaded.worksheet("Layout")?;
println!("Visibility: {:?}", sheet.get_visibility_type());
println!("Protected: {}", sheet.is_protected());
Linhas, Colunas e Células Mescladas
CellsMut expõe get_rows()/get_columns() como RowsMut/ColumnsMut para dimensionar e ocultar linhas e colunas individuais, e merge(first_row, first_column, total_rows, total_columns) para combinar um intervalo de células em uma única região mesclada.
let mut workbook = Workbook::new();
{
let mut worksheets = workbook.get_worksheets_mut();
let sheet = worksheets.get(0)?;
let mut cells = sheet.get_cells_mut();
cells.get("A1")?.put_value_string("Merged")?;
cells.get("C4")?.put_value_i32(99)?;
cells.get_rows().get(1).set_height(22.5)?;
cells.get_rows().get(3).set_is_hidden(true)?;
cells.get_columns().get(0).set_width(18.25)?;
cells.get_columns().get(2).set_is_hidden(true)?;
let mut cells = sheet.get_cells_mut();
cells.merge(0, 0, 2, 2)?;
}
workbook.save("rows-columns.xlsx")?;
let loaded = Workbook::load_xlsx("rows-columns.xlsx")?;
let sheet = loaded.worksheet("Sheet1")?;
println!(
"Row 2 height: {}",
sheet.get_rows().get(1).get_height().unwrap_or_default()
);
println!(
"Column A width: {}",
sheet.get_columns().get(0).get_width().unwrap_or_default()
);
println!("Merged regions: {}", sheet.get_cells().get_merged_cells().len());
Carregamento Defensivo com Diagnósticos
Arquivos XLSX do mundo real nem sempre são bem formados. LoadOptions expõe flags de reparo (try_repair_package, try_repair_xml), e Workbook::get_load_diagnostics() retorna um objeto LoadDiagnostics cujo issues() relata o que o carregador encontrou e reparou.
let options = LoadOptions {
try_repair_package: true,
try_repair_xml: true,
..LoadOptions::default()
};
let loaded = Workbook::load_xlsx_with_options(&path, &options)?;
let sheet = loaded.worksheet("Sheet1")?;
let cells = sheet.get_cells();
println!(
"Loaded workbook with {} worksheet(s) and {} diagnostic issue(s).",
loaded.get_worksheets().count(),
loaded.get_load_diagnostics().issues().len()
);
println!("First item: {}", cells.get("A2")?.display_string_value());
Início Rápido
# Cargo.toml
[dependencies]
aspose-cells-foss-rust = { git = "https://github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Rust" }Uma sessão mínima abordando workbook, worksheet, cell e os conceitos básicos de document-property:
use aspose_cells_foss_rust::{CellValue, Workbook};
use std::error::Error;
fn main() -> Result<(), Box<dyn Error>> {
let mut workbook = Workbook::new();
{
let mut worksheets = workbook.get_worksheets_mut();
let sheet = worksheets.get(0)?;
sheet.set_name("Report")?;
let mut cells = sheet.get_cells_mut();
cells.get("A1")?.put_value_string("Item")?;
cells.get("B1")?.put_value_string("Quantity")?;
cells.get("A2")?.put_value_string("Widgets")?;
cells.get("B2")?.put_value_i32(12)?;
cells.get("B3")?
.put_formula_with_cached_value("=SUM(B2:B2)", CellValue::Number(12.0))?;
}
workbook.get_document_properties_mut().set_title("Quick Start Report");
workbook.save("report.xlsx")?;
let loaded = Workbook::load_xlsx("report.xlsx")?;
let sheet = loaded.worksheet("Report")?;
let cells = sheet.get_cells();
println!("Title: {}", loaded.get_document_properties().get_title());
println!("Total formula -> {}", cells.get("B3")?.display_string_value());
Ok(())
}
Formatos Suportados
| Formato | Extensão | Ler | Escrever |
|---|---|---|---|
| XLSX | .xlsx | ✓ | ✓ |
XLSX é o foco da versão atual: leitura e escrita completas de ida e volta via Workbook::load_xlsx e Workbook::save, com enums LoadFormat e SaveFormat controlando a seleção explícita de formato.
Código Aberto e Licenciamento
Aspose.Cells FOSS para Rust está licenciado sob MIT. O código-fonte completo está disponível em GitHub, e a licença permite uso comercial, modificação e redistribuição.
Introdução
- Introdução
- Instalação
- Guia do Desenvolvedor
- Artigos da Base de Conhecimento
- API Reference
- Página do Produto