Giriş
Aspose.Cells FOSS for Rust, işlevselliğini aspose-cells-foss-rust crate’i üzerinden sunar ve temel tiplerin kompakt bir kümesi etrafında odaklanır: Workbook, Worksheet, Cells, Cell ve DocumentProperties, her biri yazma erişimi için eşleşen *Mut erişimcilerine sahiptir. Bu gönderi, o temel API yüzeyinin sistematik bir turudur — tek bir dar özellik değil, crate üzerine inşa edilen her uygulamanın kullandığı temeller: çalışma sayfaları oluşturma ve adlandırma, tiplenmiş hücre değerlerini okuma ve yazma, belge meta verilerini ayarlama, çalışma sayfalarını koruma ve gizleme, satır ve sütun boyutlandırma, hücreleri birleştirme ve dosyaları savunmacı bir şekilde yükleme.
Bu crate MIT lisanslıdır ve Rust 2021 sürümünü hedefler. Neredeyse her hataya açık işlem Result<_, CellsError> döndürür, bu yüzden ? operatörü ile hata yönetimi, aşağıdaki örneklerde olduğu gibi gerçek kodda da aynı şekilde çalışır. Crate, her şeyi sıfırdan yeniden uygulamak yerine küçük bir çalışma zamanı bağımlılık seti çeker — tarih-zaman değerleri için chrono, XLSX paket formatı için zip, XML ayrıştırması için roxmltree, yapılandırılmış veri için serde_json, hashleme ve kodlama için sha2 ve base64, ve rastgelelik için getrandom.
Aşağıdaki her bölüm, API’in bir alanını ilgili somut tipler ve yöntemlerle kapsar ve crate’in kendi örnek kodundan alınan çalışan Rust örnekleriyle desteklenir.
Ana Özellikler
Çalışma Kitabı ve Çalışma Sayfası Temelleri
Bir Workbook, Workbook::new() ile boş başlar ve "Sheet1" adlı bir çalışma sayfası taşır. Ek sayfalar WorksheetsMut::add(name) aracılığıyla eklenir ve yeni sayfanın indeksini döndürür. Worksheets/WorksheetsMut ayrıca active_sheet_name() ve set_active_sheet_name() aracılığıyla hangi sayfanın aktif olduğunu izler.
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());
Tiplenmiş Hücre Değerleri ve Formüller
Cells/CellsMut bir hücreyi A1 tarzı referans (get("B3")) ya da satır/sütun indeksi (get_by_index(row, column)) ile adresler. Her Cell/CellMut özel ayarlayıcılar aracılığıyla tiplenmiş değerleri kabul eder, böylece string-tabanlı dönüşümlere gerek kalmaz ve formüller önbelleğe alınmış bir değerle birlikte yazılır, böylece dosya herhangi bir yeniden hesaplamadan önce doğru sonuçlarla açılır.
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());
Belge Özellikleri
Workbook::get_document_properties_mut(), ortak meta veri alanlarını (başlık, konu, yazar, anahtar kelimeler, kategori, şirket) kapsayan bir DocumentProperties nesnesine erişir ve OOXML çekirdek/genişletilmiş özellik setleri için iç içe bir CoreDocumentProperties (get_core_mut()) ve ExtendedDocumentProperties (get_extended_mut()) sağlar.
{
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());
Çalışma Sayfası Koruması ve Görünürlüğü
Bir Worksheet, set_visibility_type(VisibilityType::Hidden) ile gizlenebilir, set_tab_color ile renklendirilebilir ve protect() ile birlikte bir WorksheetProtection nesnesi (get_protection_mut() aracılığıyla) ile kilitlenebilir; bu nesne, koruma etkin olduğunda hangi eylemlerin — hücreleri biçimlendirme, kilitli hücreleri seçme vb. — kullanılabilir olduğunu tam olarak kontrol eder.
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());
Satırlar, Sütunlar ve Birleştirilmiş Hücreler
CellsMut, bireysel satır ve sütunları boyutlandırma ve gizleme için get_rows()/get_columns()‘yi RowsMut/ColumnsMut olarak ortaya çıkarır ve hücre aralığını tek bir birleştirilmiş bölgeye dönüştürmek için merge(first_row, first_column, total_rows, total_columns)‘i sağlar.
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());
Tanılamalarla Savunmacı Yükleme
Gerçek dünya XLSX dosyaları her zaman düzgün değildir. LoadOptions, (try_repair_package, try_repair_xml) onarım bayraklarını ortaya çıkarır ve Workbook::get_load_diagnostics(), LoadDiagnostics nesnesini döndürür; bu nesnenin issues() yükleyicinin bulduğu ve onardığı şeyleri rapor eder.
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());
Hızlı Başlangıç
# Cargo.toml
[dependencies]
aspose-cells-foss-rust = { git = "https://github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Rust" }Çalışma kitabı, çalışma sayfası, hücre ve belge-özelliği temellerine dokunan minimal bir oturum:
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(())
}
Desteklenen Biçimler
| Biçim | Uzantı | Oku | Yaz |
|---|---|---|---|
| XLSX | .xlsx | ✓ | ✓ |
XLSX, mevcut sürümün odak noktasıdır: Workbook::load_xlsx ve Workbook::save aracılığıyla tam döngü okuma ve yazma, LoadFormat ve SaveFormat enumları açık biçim seçimini yönetir.
Açık Kaynak & Lisanslama
Aspose.Cells FOSS Rust için MIT lisanslıdır. Tam kaynak kodu GitHub üzerinde mevcuttur ve lisans ticari kullanım, değişiklik ve yeniden dağıtımı izin verir.