العمل مع Excel في C++: نظرة عامة على المكتبات وأمثلة الكود
على الرغم من أن لغة C++ لا تحتوي على دعم مدمج لتنسيق Excel، إلا أن هناك العديد من المكتبات الناضجة التي تسمح بقراءة وإنشاء وتحرير ملفات .xlsx و .xls. في هذه المقالة، سنستعرض ثلاث أدوات شائعة: libxlsxwriter و xlsxio و OpenXLSX. ستتعلم كيفية تثبيت كل منها، وستحصل على أمثلة عملية للمهام النموذجية - بدءًا من إنشاء التقارير وصولاً إلى استيراد البيانات.
1. libxlsxwriter - إنشاء XLSX من الصفر
libxlsxwriter هي مكتبة C خفيفة لكتابة ملفات Excel 2007+ (XLSX). لا تتطلب كائنات COM أو تثبيت Office. تدعم التنسيق والصيغ والرسوم البيانية ودمج الخلايا والتنسيق الشرطي.
التثبيت (Linux / macOS):
git clone https://github.com/jmcnamara/libxlsxwriter.gitcd libxlsxwritermakesudo make installمثال: إنشاء تقرير بسيط
#include <xlsxwriter.h>
int main() { lxw_workbook *workbook = workbook_new("report.xlsx"); lxw_worksheet *worksheet = workbook_add_worksheet(workbook, "Sales");
// العناوين 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, 1, 0, "لابتوب", NULL); worksheet_write_number(worksheet, 1, 1, 10, NULL); worksheet_write_number(worksheet, 1, 2, 75000, NULL);
// صيغة المجموع worksheet_write_formula(worksheet, 2, 2, "=C2*B2", NULL);
workbook_close(workbook); return 0;}الترجمة: g++ -o create_excel create_excel.cpp -lxlsxwriter
المزايا: أداء عالٍ، حجم صغير، دعم نشط.
العيوب: كتابة فقط (لا يمكن قراءة الملفات الموجودة).
2. xlsxio - قراءة وكتابة XLSX
xlsxio هي مكتبة بلغة C مع روابط لـ C++ تدعم قراءة وكتابة ملفات XLSX. تعتمد على minizip و expat. مناسبة تمامًا للمعالجة التدفقية للملفات الكبيرة.
التثبيت:
git clone https://github.com/brechtsanders/xlsxio.gitcd xlsxiocmake .makesudo make installمثال: قراءة البيانات من Excel
#include <xlsxio_read.h>
int main() { xlsxioreader reader = xlsxioread_open("data.xlsx"); if (reader) { xlsxioreadersheet sheet = xlsxioread_sheet_open(reader, NULL, XLSXIOREAD_SKIP_EMPTY_ROWS); 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(reader); } return 0;}الترجمة: g++ -o read_excel read_excel.cpp -lxlsxio_read
المزايا: عمل ثنائي الاتجاه، دعم الملفات الكبيرة.
العيوب: تنسيق محدود (نصوص وأرقام فقط).
3. OpenXLSX - واجهة حديثة C++17
OpenXLSX هي مكتبة header-only للغة C++17 توفر واجهة برمجة تطبيقات كائنية التوجه لقراءة وكتابة XLSX. لا تتطلب تبعيات خارجية بخلاف المكتبة القياسية.
التثبيت:
git clone https://github.com/troldal/OpenXLSX.gitcd OpenXLSXmkdir build && cd buildcmake ..makesudo make installمثال: إنشاء ملف مع تنسيق
#include <OpenXLSX/OpenXLSX.hpp>using namespace OpenXLSX;
int main() {