مقدمة
Aspose.Cells FOSS للـ C++ هي مكتبة مفتوحة المصدر لإنشاء، تحميل، تعديل، وحفظ دفاتر عمل Excel .xlsx من كود C++ الأصلي، دون الحاجة إلى Microsoft Excel أو أي أتمتة COM. تتكامل مع بناء يعتمد على CMake كمكتبة مصدر — لا توجد أي تبعية زمن تشغيل خارجية تحتاج إلى تثبيت أو ربط بخلاف مكتبة C++ القياسية.
المكتبة مرخصة تحت رخصة MIT وتستهدف C++17. يتم بناؤها باستخدام add_subdirectory أو FetchContent من نسخة git، لأنّها لا تُوزَّع عبر مدير حزم مثل vcpkg أو Conan. واجهة API منظمة حول Workbook تمتلك WorksheetCollection، أوراق العمل التي تكشف عن كائن Cells للوصول إلى مستوى الخلية، وواجهة Style للخطوط والتعبئات والحدود. إذا كنت تبني خدمات خلفية، مولدات تقارير، أو خطوط تصدير بيانات في C++ وتحتاج إلى إنتاج أو قراءة ملفات .xlsx دون اللجوء إلى Excel، فإن هذه المكتبة توفر لك طريقة أصلية للقيام بذلك.
Aspose.Cells FOSS متوفر أيضًا لـ .NET، Go، Java، Python، Rust، و TypeScript. تتبع مكتبة C++ نفس النهج كما في باقي العائلة: API يركز على XLSX ومبني على ما تم تنفيذها فعليًا، تحت رخصة سماحية.
ما الذي يتضمنه
هيكل دفتر العمل وورقة العمل
يبدأ Workbook بورقة عمل واحدة. يتم إنشاء أوراق إضافية باستخدام WorksheetCollection::Add، ويمكن الوصول إلى الأوراق الموجودة عبر الفهرس أو بالاسم من خلال فهرس المجموعة. كل Worksheet يكشف خلاياه عبر GetCells().
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
using namespace Aspose::Cells_FOSS;
Workbook workbook;
workbook.GetWorksheets()[0].SetName("Data");
workbook.GetWorksheets().Add("Summary");
Worksheet& data = workbook.GetWorksheets()["Data"];
data.GetCells()["A1"].PutValue("Product");
data.GetCells()["B1"].PutValue("Price");
قيم الخلايا، الصيغ، وتنسيقات الأرقام
Cell::PutValue يحتوي على إصدارات متعددة للأنواع: سلاسل، أعداد صحيحة، أعداد مزدوجة، قيم منطقية، وأنواع قيم أخرى، لذا لا يلزم تحويل السلاسل يدوياً. SetFormula يقبل صيغة مع أو بدون = أولية ويطبعها؛ ثم GetType يُبلغ عن CellValueType لـ Formula. يتم تطبيق تنسيق الأرقام عبر Style::SetNumberFormat ويؤثر فقط على نص العرض الذي تُعيده GetDisplayStringValue — القيمة المخزنة الأساسية لا تتغير.
auto& sheet = workbook.GetWorksheets()[0];
auto cell = sheet.GetCells()["B2"];
cell.PutValue(1234.567);
auto style = cell.GetStyle();
style.SetNumberFormat("#,##0.00");
cell.SetStyle(style);
sheet.GetCells()["B3"].SetFormula("B2*2");
// GetFormula() now returns "=B2*2"; GetType() reports CellValueType::Formula
std::cout << cell.GetDisplayStringValue() << std::endl; // "1,234.57"
التنسيق باستخدام الخطوط، التعبئات، والحدود
Cell::GetStyle() و SetStyle() يقرئان ويكتبان كائن Style الذي يجمع بين Font، Borders، وإعدادات التعبئة. يتم إنشاء الألوان باستخدام Color::FromArgb، وتُحدد أنماط التعبئة عبر FillPattern.
Style headerStyle = sheet.GetCells()["A1"].GetStyle();
Font font;
font.SetBold(true);
font.SetColor(Color::FromArgb(255, 255, 255, 255));
headerStyle.SetFont(font);
headerStyle.SetPattern(FillPattern::Solid);
headerStyle.SetForegroundColor(Color::FromArgb(255, 34, 120, 212));
sheet.GetCells()["A1"].SetStyle(headerStyle);
التحقق من البيانات والتنسيق الشرطي
ValidationCollection::Add يحدّ نطاق قاعدة Validation إلى CellArea؛ ضبط ValidationType إلى List مع قيمة Formula1 ينتج قائمة منسدلة داخل الخلية. ConditionalFormattingCollection::Add ينشئ مجموعة تنسيق يتم تحديد نطاقها بـ AddArea وتُملأ بـ AddCondition، التي تأخذ FormatConditionType، وOperatorType، وصيغة أو صيغتين.
int validationIndex = sheet.GetValidations().Add(CellArea::CreateCellArea("B1", "B3"));
auto validation = sheet.GetValidations()[validationIndex];
validation.SetType(ValidationType::List);
validation.SetFormula1("\"Open,Closed\"");
validation.SetShowError(true);
int cfIndex = sheet.GetConditionalFormattings().Add();
auto formatting = sheet.GetConditionalFormattings()[cfIndex];
formatting.AddArea(CellArea::CreateCellArea("C1", "C3"));
int conditionIndex = formatting.AddCondition(
FormatConditionType::CellValue, OperatorType::Between, "1", "9");
auto condition = formatting[conditionIndex];
auto conditionStyle = condition.GetStyle();
conditionStyle.SetPattern(FillPattern::Solid);
conditionStyle.SetForegroundColor(Color::FromArgb(255, 255, 199, 206));
condition.SetStyle(conditionStyle);
إعداد الصفحة وتخطيط الطباعة
Worksheet::GetPageSetup() يُعيد كائن PageSetup يتحكم في حجم الورق، الاتجاه، المقياس، منطقة الطباعة، وصفوف/أعمدة عناوين الطباعة. يتم التحقق من القيم عند الإسناد — على سبيل المثال، استدعاء SetScale خارج النطاق يرفع استثناء CellsException.
auto& pageSetup = sheet.GetPageSetup();
pageSetup.SetOrientation(PageOrientationType::Landscape);
pageSetup.SetPaperSize(PaperSizeType::PaperA4);
pageSetup.SetFitToPagesWide(1);
pageSetup.SetFitToPagesTall(3);
pageSetup.SetPrintArea("$A$1:$D$20");
pageSetup.SetPrintTitleRows("$1:$2");
البدء السريع
Aspose.Cells FOSS للغة C++ غير موزّع عبر مدير الحزم — استنسخ المستودع وأضفه إلى مشروع CMake الخاص بك:
git clone https://github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Cpp.git
أضف المكتبة كدليل فرعي داخل CMakeLists.txt الخاص بك وربطها بالهدف aspose_cells_foss:
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp/Aspose.Cells.Foss.Cpp)
target_link_libraries(MyApp PRIVATE aspose_cells_foss)
ثم أنشئ، وصِّف، واحفظ دفتر عمل:
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"
#include "aspose/cells_foss/Style.h"
#include "aspose/cells_foss/Font.h"
#include "aspose/cells_foss/Color.h"
using namespace Aspose::Cells_FOSS;
int main() {
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
sheet.SetName("Products");
sheet.GetCells()["A1"].PutValue("Product");
sheet.GetCells()["B1"].PutValue("Price");
sheet.GetCells()["A2"].PutValue("Apple");
sheet.GetCells()["B2"].PutValue(2.99);
sheet.GetCells()["A3"].PutValue("Orange");
sheet.GetCells()["B3"].PutValue(1.99);
sheet.GetCells()["B4"].SetFormula("SUM(B2:B3)");
Style header = sheet.GetCells()["A1"].GetStyle();
Font font;
font.SetBold(true);
header.SetFont(font);
sheet.GetCells()["A1"].SetStyle(header);
workbook.Save("products.xlsx");
return 0;
}
الصيغ المدعومة
| تنسيق | امتداد | قراءة | كتابة |
|---|---|---|---|
| XLSX | .xlsx | ✓ | ✓ |
XLSX هو الصيغة الوحيدة التي يقرأها ويكتبها الإصدار الحالي. مُنشئا الملف وتدفق البيانات في Workbook يحملان بيانات .xlsx، وSave يكتبها مرة أخرى؛ تُحكم تعداد LoadFormat وSaveFormat اختيار الصيغة الصريح في تلك الاستدعاءات.
المصدر المفتوح والترخيص
Aspose.Cells FOSS للغة C++ مرخص تحت رخصة MIT. الشيفرة الكاملة متاحة على GitHub، وتسمح الرخصة بالاستخدام التجاري، والتعديل، وإعادة التوزيع.