العمل مع Excel في C++: المكتبات والأدوات
العمل مع جداول Excel (تنسيق .xlsx) هي إحدى المهام الشائعة في البرمجة التطبيقية. لا يوجد دعم مدمج لهذا التنسيق في لغة C++، ولكن هناك العديد من المكتبات عالية الجودة التي تسمح بقراءة وإنشاء وتحرير ملفات Excel. في هذه المقالة، سنستعرض أربعة أساليب رئيسية: libxlsxwriter و xlsxio و OpenXLSX والعمل عبر واجهة COM على نظام Windows.
1. libxlsxwriter — إنشاء XLSX "أثناء التشغيل"
libxlsxwriter هي مكتبة بلغة C، مع أغلفة للغة C++. تسمح بإنشاء ملفات XLSX كاملة مع دعم التنسيق والصيغ والرسوم البيانية ودمج الخلايا. الميزة الرئيسية هي السرعة والاستهلاك الأدنى للذاكرة.
التثبيت
قم بتنزيل المصدر من GitHub وقم ببنائه باستخدام CMake:
git clone https://github.com/jmcnamara/libxlsxwriter.gitcd libxlsxwritermkdir build && cd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemakesudo make installمثال: إنشاء جدول بصيغة
#include <xlsxwriter.h>
int main() { lxw_workbook *workbook = workbook_new("report.xlsx"); lxw_worksheet *worksheet = workbook_add_worksheet(workbook, "المبيعات");
// العناوين worksheet_write_string(worksheet, 0, 0, "المنتج", NULL); worksheet_write_string(worksheet, 0, 1, "الكمية", NULL); worksheet_write_string(worksheet, 0, 2, "السعر", NULL); worksheet_write_string(worksheet, 0, 3, "الإجمالي", NULL);
// البيانات worksheet_write_string(worksheet, 1, 0, "تفاح", NULL); worksheet_write_number(worksheet, 1, 1, 100, NULL); worksheet_write_number(worksheet, 1, 2, 2.5, NULL);
// الصيغة worksheet_write_formula(worksheet, 1, 3, "=B2*C2", NULL);
workbook_close(workbook); return 0;}للتجميع، استخدم:
g++ -o create_excel create_excel.cpp -lxlsxwriter2. xlsxio — القراءة والكتابة البسيطة
xlsxio هي مكتبة خفيفة الوزن بلغة C، موجهة لقراءة ملفات XLSX. تدعم التحليل التدفقي، مما يسمح بمعالجة الملفات الكبيرة دون تحميلها في الذاكرة.
التثبيت
git clone https://github.com/brechtsanders/xlsxio.gitcd xlsxiomkdir build && cd buildcmake ..makesudo make installمثال: قراءة البيانات من Excel
#include <xlsxio_read.h>
int main() { xlsxioreader xlsxioread = xlsxioread_open("data.xlsx"); if (!xlsxioread) return 1;
xlsxioreadersheet sheet = xlsxioread_sheet_open(xlsxioread, NULL, 0); if (sheet) { while (xlsxioread_sheet_next_row(sheet)) { const char* value; while ((value = xlsxioread_sheet_next_cell(sheet)) != NULL) { printf("%s\\t", value); } printf(""); } xlsxioread_sheet_close(sheet); } xlsxioread_close(xlsxioread); return 0;}3. OpenXLSX — واجهة C++ حديثة
OpenXLSX هي مكتبة بلغة C++17، توفر واجهة برمجة تطبيقات موجهة للكائنات للعمل مع XLSX. تدعم القراءة والكتابة والأنماط والعمل مع أوراق متعددة.
التثبيت
git clone https://github.com/troldal/OpenXLSX.gitcd OpenXLSXmkdir build && cd buildcmake .. -DOPENXLSX_BUILD_TESTS=OFFmakesudo make installمثال: الكتابة مع التنسيق
#include <OpenXLSX/OpenXLSX.hpp>
int main() { using namespace OpenXLSX;
XLDocument doc; doc.create("formatted.xlsx"); auto wks = doc.workbook().worksheet("Sheet1");
// الكتابة مع التنسيق XLCellValue v