العمل مع Excel في Rust: نظرة عامة على المكتبات وأمثلة الأكواد
Rust هي لغة برمجة نظامية تُستخدم بشكل متزايد لإنشاء أدوات عالية الأداء، بما في ذلك معالجة البيانات الجدولية. على عكس Python، حيث pandas أو openpyxl هما المعيار، فإن النظام البيئي لـ Rust للعمل مع Excel أقل حجمًا، لكنه يقدم عدة حلول ناضجة وسريعة. في هذه المقالة، سنستعرض ثلاث مكتبات رئيسية: rust_xlsxwriter (للكتابة)، calamine (للقراءة)، و xlsx (متعددة الاستخدامات). ستتعلم كيفية قراءة وإنشاء وتعديل ملفات XLSX باستخدام Rust.
لماذا استخدام Rust مع Excel؟
المزايا الرئيسية لـ Rust عند العمل مع الجداول:
- السرعة — الكود المُجمّع يعالج ملايين الصفوف بشكل أسرع من النظائر المفسّرة.
- الأمان — نظام الأنواع والملكية الصارم يمنع تسرب الذاكرة وأخطاء الوصول.
- التوافق عبر المنصات — الملفات الثنائية تعمل على Windows و Linux و macOS بدون تبعيات.
- الحجم الصغير — يمكن أن يكون حجم الملف التنفيذي النهائي أقل من 5 ميجابايت.
1. كتابة Excel: rust_xlsxwriter
rust_xlsxwriter هو فرع من المكتبة الشهيرة xlsxwriter، مُكيّف لـ Rust. يتيح إنشاء ملفات XLSX من الصفر، ويدعم التنسيق، ودمج الخلايا، والرسوم البيانية، والأنماط المخصصة.
التثبيت:
// Cargo.toml[dependencies]rust_xlsxwriter = "0.64"مثال: إنشاء تقرير بسيط
use rust_xlsxwriter::*;
fn main() -> Result<(), XlsxError> { let mut workbook = Workbook::new(); let sheet = workbook.add_worksheet();
// العنوان let header_format = Format::new() .set_bold() .set_font_color(Color::White) .set_background_color(Color::Blue);
sheet.write_string_with_format(0, 0, "الاسم", &header_format)?; sheet.write_string_with_format(0, 1, "المبيعات", &header_format)?; sheet.write_string_with_format(0, 2, "التاريخ", &header_format)?;
// البيانات let data = vec![ ("المنتج أ", 1500, "2024-01-15"), ("المنتج ب", 2300, "2024-01-16"), ("المنتج ج", 800, "2024-01-17"), ];
for (row, (name, sales, date)) in data.iter().enumerate() { sheet.write_string(row as u32 + 1, 0, name)?; sheet.write_number(row as u32 + 1, 1, *sales as f64)?; sheet.write_string(row as u32 + 1, 2, date)?; }
// العرض التلقائي للأعمدة sheet.set_column_width(0, 15)?; sheet.set_column_width(1, 12)?; sheet.set_column_width(2, 14)?;
workbook.save("report.xlsx")?; println!("تم إنشاء الملف report.xlsx"); Ok(())}تدعم المكتبة جميع الأنواع الأساسية: الأرقام، النصوص، التواريخ، الصيغ، الروابط التشعبية. للتنسيق، تتوفر الخطوط، التعبئة، الحدود، والمحاذاة.
2. قراءة Excel: calamine
calamine هو محلل سريع لملفات XLSX/XLS/XLSB/ODS. لا يستخدم تبعيات خارجية ويعمل فقط للقراءة. مثالي لاستخراج البيانات من الجداول الكبيرة.
التثبيت:
[dependencies]calamine = "0.24"مثال: قراءة جميع البيانات من ورقة عمل
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") { for row in range.rows() { for cell in row { // عرض قيمة الخلية كنص print!("{} | ", cell.to_string()); } println!();