العمل مع Excel في Rust: نظرة عامة على المكتبات وأمثلة الكود
لغة Rust، المعروفة بأدائها وأمانها، توفر إمكانيات ممتازة للعمل مع جداول بيانات Excel. في هذه المقالة، سنستعرض ثلاث مكتبات الأكثر شيوعًا: rust_xlsxwriter و calamine و xlsx. ستتعلم كيفية قراءة وإنشاء وتعديل ملفات بصيغة .xlsx، بالإضافة إلى تطبيق وظائف التنسيق المتقدمة.
لماذا Rust للعمل مع Excel؟
تعتبر Rust مثالية لمهام معالجة البيانات بفضل:
- تكلفة صفرية للتجريدات - سرعة عالية في العمل مع الملفات الكبيرة؛
- عمل آمن مع الذاكرة - استبعاد تسرب الذاكرة وأخطاء التجزئة؛
- التوافق عبر المنصات - يعمل الكود على Windows و macOS و Linux؛
- تكامل ممتاز مع الأنظمة الأخرى عبر FFI.
مكتبة rust_xlsxwriter: إنشاء ملفات Excel
rust_xlsxwriter هي مكتبة حديثة لإنشاء ملفات Excel مع إمكانيات تنسيق غنية. تدعم الأنماط ودمج الخلايا والصيغ والتنسيق الشرطي.
التثبيت
أضف إلى Cargo.toml:
[dependencies]rust_xlsxwriter = "0.77"مثال: إنشاء تقرير مع التنسيق
لننشئ ملفًا بعناوين وبيانات وصيغة:
use rust_xlsxwriter::*;
fn main() -> Result<(), XlsxError> { let mut workbook = Workbook::new(); let worksheet = workbook.add_worksheet();
// إنشاء الأنماط 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);
// العناوين worksheet.write_with_format(0, 0, "المنتج", &header_format)?; worksheet.write_with_format(0, 1, "الكمية", &header_format)?; worksheet.write_with_format(0, 2, "السعر", &header_format)?; worksheet.write_with_format(0, 3, "المجموع", &header_format)?;
// البيانات let items = vec![ ("لابتوب", 5, 1200.00), ("فأرة", 10, 25.50), ("لوحة مفاتيح", 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)?; // الصيغة: الكمية * السعر worksheet.write_formula(row, 3, &format!("B{}*C{}", row+1, row+1))?; }
// العرض التلقائي للأعمدة 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!("تم إنشاء الملف report.xlsx!"); Ok(())}مكتبة calamine: قراءة ملفات Excel
calamine هي محلل سريع لقراءة ملفات Excel (.xlsx و .xls و .xlsb). لا يتطلب تثبيت Excel ويعمل بالكامل في الذاكرة.
التثبيت
[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") { println!("محتوى الملف {}:", path); println!("{:-<40}", "");
for row in range.rows() { for cell in row { match cell { calamine::Data::Stri