العمل مع Excel في C++: المكتبات وأمثلة الكود

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع Excel في C++: نظرة عامة على المكتبات وأمثلة عملية



عند تطوير التطبيقات بلغة C++، غالبًا ما تنشأ الحاجة للتفاعل مع ملفات Microsoft Excel (تنسيقات .xls و .xlsx). قد يكون ذلك لتصدير التقارير، أو استيراد البيانات، أو أتمتة الجداول، أو تحليل كميات كبيرة من المعلومات. على عكس اللغات ذات المكتبات القياسية الغنية (Python, C#)، لا تحتوي C++ على أدوات مدمجة للعمل مع Excel، ولكن توجد عدة مكتبات خارجية قوية تحل هذه المشكلة. في هذه المقالة، سنستعرض ثلاثة حلول شائعة: xlnt و libxl و OpenXLSX، وسنقدم أمثلة على الكود لكل منها.



1. مكتبة xlnt (مجانية، مفتوحة المصدر)



xlnt هي مكتبة C++ حديثة لقراءة وكتابة وتعديل ملفات بتنسيق .xlsx. لا تعتمد على كائنات COM أو Excel المثبت، مما يجعلها مثالية للمشاريع عبر المنصات (Windows, Linux, macOS). تستخدم المكتبة معيار C++14/17 ويتم دعمها بنشاط من قبل المجتمع.



الإمكانيات الرئيسية:

  • قراءة وكتابة الخلايا والصفوف والأعمدة.
  • دعم الأنماط (الخطوط، الألوان، الحدود، المحاذاة).
  • العمل مع الصيغ، النطاقات، والخلايا المدمجة.
  • إدارة أوراق عمل متعددة.
  • العمل مع الصور والرسوم البيانية (بشكل محدود).


التثبيت (عبر vcpkg أو البناء من المصدر):

vcpkg install xlnt


مثال: إنشاء ملف XLSX بسيط

#include <xlnt/xlnt.hpp>

int main() { xlnt::workbook wb; xlnt::worksheet ws = wb.active_sheet(); ws.title("تقرير");

// كتابة البيانات ws.cell("A1").value("الاسم"); ws.cell("B1").value("الكمية"); ws.cell("C1").value("السعر");

ws.cell("A2").value("المنتج 1"); ws.cell("B2").value(10); ws.cell("C2").value(250.5);

// نمط للعناوين xlnt::header_footer hf; xlnt::font bold_font(true); ws.cell("A1").font(bold_font);

wb.save("example.xlsx"); return 0;}


مثال: قراءة البيانات من ملف موجود

#include <xlnt/xlnt.hpp>#include <iostream>

int main() { xlnt::workbook wb; wb.load("example.xlsx"); xlnt::worksheet ws = wb.active_sheet();

for (auto row : ws.rows(false)) { for (auto cell : row) { std::cout << cell.to_string() << "\\t"; } std::cout << std::endl; } return 0;}


2. مكتبة libxl (تجارية، تتوفر نسخة مجانية)



libxl هي مكتبة سريعة وخفيفة للعمل مع .xls و .xlsx. تدعم كلاً من تنسيق Excel الثنائي القديم 97-2003 وتنسيق OOXML الحديث. يتم توزيع المكتبة بموجب ترخيص تجاري، ولكن للاستخدام غير التجاري تتوفر نسخة مجانية مع قيود (علامة مائية على الورقة).



الإمكانيات الرئيسية:

  • دعم كلا التنسيقين: XLS و XLSX.
  • تنسيق الخلايا: الخطوط، الألوان، الحدود، التعبئة.
  • العمل مع الصيغ، الخلايا المدمجة، والمرشحات التلقائية.
  • إدارة الأوراق والرسوم البيانية (بشكل محدود).
  • أداء عالي عند العمل مع الملفات الكبيرة.


التثبيت: قم بتنزيل SDK من الموقع الرسمي (libxl.com) وقم بتضمين ملفات الرأس والمكتبة في مشروعك.



مثال: كتابة البيانات إلى XLSX

#include "libxl.h"

int main() { libxl::Book* book = xlCreateXMLBook(); // أو xlCreateBook() لـ XLS if (book) { libxl::Sheet* sheet = book->addSheet("الورقة1"); if (sheet) { sheet

توصيات