مقدمه

Aspose.Cells FOSS برای C++ یک کتابخانه منبع‌باز برای ایجاد، بارگذاری، ویرایش و ذخیره کتاب‌کارهای Excel .xlsx از کد بومی C++ است، بدون نیاز به Microsoft Excel یا هرگونه اتوماسیون COM. این کتابخانه در یک ساختار مبتنی بر CMake به عنوان کتابخانه منبع ادغام می‌شود — هیچ وابستگی زمان‌اجرای خارجی برای نصب یا لینک کردن علاوه بر کتابخانه استاندارد C++ وجود ندارد.

این کتابخانه تحت مجوز MIT است و هدف آن C++17 می‌باشد. از add_subdirectory یا FetchContent پس از کلون گیت ساخته می‌شود، چرا که از طریق مدیر بسته‌ای مانند 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 موجود است و این مجوز اجازهٔ استفاده تجاری، تغییر و توزیع مجدد را می‌دهد.


شروع کار

منابع مرتبط