บทนำ
Aspose.Cells FOSS สำหรับ Rust เปิดเผยฟังก์ชันการทำงานผ่าน crate aspose-cells-foss-rust โดยมุ่งเน้นที่ชุดประเภทหลักที่กะทัดรัด: Workbook, Worksheet, Cells, Cell และ DocumentProperties ซึ่งแต่ละประเภทมีตัวเข้าถึง *Mut ที่สอดคล้องสำหรับการเขียนโพสต์นี้เป็นการทัวร์แบบเป็นระบบของพื้นผิว API หลัก — ไม่ใช่คุณลักษณะแคบเพียงอย่างเดียว แต่เป็นพื้นฐานที่ทุกแอปพลิเคชันที่สร้างบน crate นี้ใช้: การสร้างและตั้งชื่อ worksheet, การอ่านและเขียนค่าของเซลล์ที่มีประเภท, การตั้งค่าเมตาดาต้าเอกสาร, การปกป้องและซ่อน worksheet, การกำหนดขนาดแถวและคอลัมน์, การรวมเซลล์, และการโหลดไฟล์อย่างปลอดภัย.
crate นี้มีใบอนุญาต MIT และมุ่งเป้าไปที่ Rust edition 2021. เกือบทุกการดำเนินการที่อาจล้มเหลวจะคืนค่า Result<_, CellsError> ดังนั้นการจัดการข้อผิดพลาดด้วยโอเปอเรเตอร์ ? จะทำงานผ่านตัวอย่างด้านล่างเช่นเดียวกับในโค้ดจริง. crate นี้ดึงชุดของการพึ่งพา runtime ขนาดเล็กแทนการเขียนใหม่ทั้งหมดจากศูนย์ — chrono สำหรับค่า date-time, zip สำหรับรูปแบบแพ็กเกจ XLSX, roxmltree สำหรับการพาร์ส XML, serde_json สำหรับข้อมูลเชิงโครงสร้าง, sha2 และ base64 สำหรับการแฮชและการเข้ารหัส, และ getrandom สำหรับความสุ่ม.
แต่ละส่วนด้านล่างครอบคลุมพื้นที่หนึ่งของ API พร้อมกับประเภทและเมธอดที่เกี่ยวข้อง, รองรับด้วยตัวอย่าง Rust ที่ทำงานได้ซึ่งดึงมาจากโค้ดตัวอย่างของ crate เอง.
คุณลักษณะสำคัญ
พื้นฐานของ Workbook และ Worksheet
A Workbook เริ่มต้นเป็นค่าว่างด้วย Workbook::new(), มี worksheet หนึ่งชื่อ "Sheet1". แผ่นงานเพิ่มเติมมาจาก WorksheetsMut::add(name), ซึ่งจะคืนค่า index ของแผ่นใหม่. Worksheets/WorksheetsMut ยังติดตามว่าแผ่นงานใดเป็นแอคทีฟผ่าน active_sheet_name() และ 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());
ค่าช่องเซลล์ที่พิมพ์ประเภทและสูตร
Cells/CellsMut ระบุเซลล์ด้วยการอ้างอิงแบบ A1-style (get("B3")) หรือด้วยดัชนีแถว/คอลัมน์ (get_by_index(row, column)) ทุก Cell/CellMut ยอมรับค่าที่พิมพ์ประเภทผ่านตัวตั้งค่าเฉพาะจึงไม่ต้องทำการแปลงแบบ stringly-typed และสูตรจะถูกเขียนพร้อมค่าที่แคชไว้เพื่อให้ไฟล์เปิดด้วยผลลัพธ์ที่ถูกต้องก่อนการคำนวณใหม่ใดๆ.
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());
คุณสมบัติเอกสาร
Workbook::get_document_properties_mut() เข้าถึงอ็อบเจกต์ DocumentProperties ที่ครอบคลุมฟิลด์เมตาดาต้าทั่วไป (title, subject, author, keywords, category, company) พร้อมกับ CoreDocumentProperties ย่อย (get_core_mut()) และ ExtendedDocumentProperties (get_extended_mut()) สำหรับชุดคุณสมบัติ core/extended ของ OOXML.
{
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());
การป้องกันและการมองเห็นแผ่นงาน
A Worksheet สามารถซ่อนด้วย set_visibility_type(VisibilityType::Hidden) สีด้วย set_tab_color และล็อกด้วย protect() พร้อมอ็อบเจกต์ WorksheetProtection (ผ่าน get_protection_mut()) ซึ่งควบคุมอย่างแม่นยำว่าการกระทำใด — การจัดรูปแบบเซลล์, การเลือกเซลล์ที่ล็อกไว้, ฯลฯ — จะยังคงใช้งานได้เมื่อเปิดการป้องกัน.
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());
แถว, คอลัมน์, และเซลล์ที่รวมกัน
CellsMut เปิดเผย get_rows()/get_columns() เป็น RowsMut/ColumnsMut สำหรับการปรับขนาดและซ่อนแถวหรือคอลัมน์แต่ละรายการ, และ merge(first_row, first_column, total_rows, total_columns) เพื่อรวมช่วงของเซลล์เป็นหนึ่งพื้นที่ที่รวมกัน.
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());
การโหลดแบบป้องกันพร้อมการวินิจฉัย
ไฟล์ XLSX ในโลกจริงไม่ได้ถูกจัดรูปแบบอย่างสมบูรณ์เสมอไป LoadOptions เปิดเผยแฟล็กการซ่อมแซม (try_repair_package, try_repair_xml) และ Workbook::get_load_diagnostics() คืนค่าอ็อบเจ็กต์ LoadDiagnostics ที่ issues() รายงานสิ่งที่ตัวโหลดพบและซ่อมแซม.
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());
เริ่มต้นอย่างรวดเร็ว
# Cargo.toml
[dependencies]
aspose-cells-foss-rust = { git = "https://github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Rust" }เซสชันขั้นต่ำที่ครอบคลุมพื้นฐานของเวิร์กบุ๊ก, เวิร์กชีต, เซลล์, และคุณสมบัติของเอกสาร:
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(())
}
รูปแบบที่รองรับ
| รูปแบบ | ส่วนขยาย | อ่าน | เขียน |
|---|---|---|---|
| XLSX | .xlsx | ✓ | ✓ |
XLSX เป็นจุดสนใจของรุ่นปัจจุบัน: การอ่านและเขียนแบบรอบเต็มผ่าน Workbook::load_xlsx และ Workbook::save โดยมี enum LoadFormat และ SaveFormat ควบคุมการเลือกรูปแบบอย่างชัดเจน.
โอเพนซอร์สและการให้ใบอนุญาต
Aspose.Cells FOSS สำหรับ Rust มีใบอนุญาต MIT. โค้ดต้นฉบับทั้งหมดพร้อมให้ใช้งานบน GitHub, และใบอนุญาตอนุญาตให้ใช้เชิงพาณิชย์, แก้ไข, และเผยแพร่ต่อ.