מבוא
ניהול גיליונות אלקטרוניים הוא החלק של Aspose.Cells FOSS עבור C++ שהרבה תוכניות נוגעות בו תחילה: ה-Workbook שמחזיק את הקובץ, האובייקטים Worksheet שבתוכו, והאוסף Cells שמכיל ערכים, נוסחאות ועיצוב. פוסט זה חוקר את המשטח הזה לעומק יותר מהקדמה כללית — איך חוברות עבודה (workbooks) וגיליונות (worksheets) נוצרות ומנווטות, איך ערכי תאים ונוסחאות נקראים ונכתבים, איך Style, Font, Color ו-Borders מצרפים לעיצוב הפלט, ואיך PageSetup, Hyperlink, DefinedName ו-Validation מוסיפים מבנה סביב רשת התאים הגולמית.
כל מחלקה שמכוסה כאן היא חלק מה-API הטבעי של C++ המוצהר תחת כותרות aspose/cells_foss/. אין אינטראקציית COM ואין תלות בהתקנת Microsoft Excel — הספרייה קוראת וכותבת את פורמט החבילה .xlsx ישירות, וזה גם הסיבה שהגרסה הנוכחית תומכת רק ב-.xlsx, הן בטעינה והן בשמירה.
הדוגמאות למטה מתבססות אחת על השנייה: חוברת עבודה נוצרת, גליונות ותאים מתמלאים, נעשה עיצוב, והקובץ נשמר ונקרא מחדש כדי לאשר את המעבר הלולתי. כל הקוד מותאם ממערכי הבדיקה של התאימות, זהב ובדיקות היחידה של הספרייה, ולכן הוא משקף פעולות שנבדקו על פלט .xlsx אמיתי.
תכונות מרכזיות
ניהול חוברות עבודה וגליונות
Workbook מתחיל עם גיליון אחד ב-WorksheetCollection. גליונות מתווספים באמצעות Add(), מחופשים לפי אינדקס או לפי שם, ומשנים שם באמצעות SetName(). WorksheetCollection גם עוקב אחרי איזה גיליון הוא הפעיל:
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
using namespace Aspose::Cells_FOSS;
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
sheet.SetName("Data");
int summaryIndex = workbook.GetWorksheets().Add("Summary");
workbook.GetWorksheets().SetActiveSheetIndex(0);
int sheetCount = workbook.GetWorksheets().GetCount(); // 2
שמירה וטעינה חוזרת מתבצעות באמצעות אותו סוג Workbook. Workbook::Save() מקבלת נתיב קובץ, ו-Workbook ניתן לבנות ישירות מנתיב או ממאגר בתים בזיכרון, שמחזיר ערכי תאים ונוסחאות:
workbook.Save("report.xlsx");
Workbook loaded("report.xlsx");
Worksheet& reloadedSheet = loaded.GetWorksheets()["Data"];
ערכי תאים ונוסחאות
Cells, שנגיש דרך Worksheet::GetCells(), מאנדקס תאים לפי רפרנס בסגנון A1. Cell::PutValue() מקבל מחרוזות, שלמים, כפולים ובוליאנים, SetFormula() שומר מחרוזת נוסחת Excel, ו-GetValue() מחזיר CellValue עם נגשי typed (AsString(), AsInteger(), AsDouble(), AsBool(), AsDateTime()):
Cells& cells = sheet.GetCells();
cells["A1"].PutValue("Category");
cells["B1"].PutValue("Amount");
cells["A2"].PutValue("Travel");
cells["B2"].PutValue(482.50);
cells["A3"].PutValue("Supplies");
cells["B3"].PutValue(129.99);
cells["B4"].SetFormula("=SUM(B2:B3)");
CellValue amount = cells["B2"].GetValue();
if (amount.IsDouble()) {
double value = amount.AsDouble();
}
std::string formula = cells["B4"].GetFormula();
Cell::GetType() מדווח על ה-CellValueType המאוחסן (Blank, String, Number, Boolean, DateTime או Formula), ו-GetDisplayStringValue() מחזיר את הערך מעוצב כפי שהייתי נראה ב-Excel, מכבד את פורמט המספר שהוחל דרך Style.
עיצוב עם Style, Font, Color ו-Borders
Cell::GetStyle() מחזיר אובייקט Style שניתן לשנותו ולהחיל אותו מחדש עם SetStyle(). Style מציג Font, סט Borders, תבנית מילוי וצבע, יישור, ופורמט מספר:
#include "aspose/cells_foss/Style.h"
#include "aspose/cells_foss/Color.h"
Cell headerCell = sheet.GetCells()["A1"];
Style style = headerCell.GetStyle();
Font font = style.GetFont();
font.SetBold(true);
font.SetColor(Color::FromArgb(255, 255, 255, 255));
style.SetFont(font);
style.SetPattern(FillPattern::Solid);
style.SetForegroundColor(Color::FromArgb(255, 34, 120, 212));
style.SetHorizontalAlignment(HorizontalAlignmentType::Center);
Borders borders = style.GetBorders();
Border bottomBorder = borders.GetBottom();
bottomBorder.SetLineStyle(BorderStyleType::Thin);
borders.SetBottom(bottomBorder);
style.SetBorders(borders);
style.SetNumberFormat("#,##0.00");
headerCell.SetStyle(style);
Style הוא טיפוס ערך: קריאתו חזרה עם GetStyle() משקפת את מה שהוגדר לאחרונה עם SetStyle(), מה שהופך את זה לפשוט לבנות סגנון אחד וליישם אותו על שורת כותרת או על טווח של תאי נתונים.
הגדרת דף וקונפיגורציית הדפסה
Worksheet::GetPageSetup() מחזיר אובייקט PageSetup המכסה גודל נייר, כיוון, שוליים, קנה מידה, כותרות הדפסה והפסקות עמוד:
#include "aspose/cells_foss/PageSetup.h"
PageSetup& pageSetup = sheet.GetPageSetup();
pageSetup.SetOrientation(PageOrientationType::Landscape);
pageSetup.SetPaperSize(PaperSizeType::PaperA4);
pageSetup.SetFitToPagesWide(1);
pageSetup.SetFitToPagesTall(0);
pageSetup.SetPrintArea("$A$1:$D$20");
pageSetup.SetPrintTitleRows("$1:$1");
pageSetup.SetLeftMargin(0.5);
pageSetup.SetCenterFooter("Page &P of &N");
pageSetup.AddHorizontalPageBreak(20);
השוליים זמינים הן ביחידות גולמיות (GetLeftMargin()) והן באינצ’ים (GetLeftMarginInch()), ו-GetHorizontalPageBreaks() / GetVerticalPageBreaks() מחזירים את מיקומי הפסקות העמוד המוגדרים כרגע בגליון.
קישורים, שמות מוגדרים, ואימות נתונים
Worksheet::GetHyperlinks() מחזיר HyperlinkCollection. Add() מקבל תא או טווח יעד בתוספת כתובת ומחזיר את המפתח של הקישור החדש, המשמש לאחזור אובייקט Hyperlink לצורך שינויים נוספים:
#include "aspose/cells_foss/Hyperlink.h"
sheet.GetCells()["A1"].PutValue("Documentation");
int linkIndex = sheet.GetHyperlinks().Add("A1", 1, 1, "https://example.com/docs");
Hyperlink link = sheet.GetHyperlinks()[linkIndex];
link.SetTextToDisplay("Documentation");
link.SetScreenTip("Open the docs site");
Workbook::GetDefinedNames() מנהל טווחים בשם באותו האופן — Add() מחזיר אינדקס ל-DefinedNameCollection:
#include "aspose/cells_foss/DefinedName.h"
int nameIndex = workbook.GetDefinedNames().Add("Total", "=Data!$B$2:$B$3");
DefinedName total = workbook.GetDefinedNames()[nameIndex];
total.SetComment("Sum of tracked expenses");
Worksheet::GetValidations() פועל לפי דפוס האיסוף זהה לכללי אימות נתונים, המוגבלים ל-CellArea:
#include "aspose/cells_foss/Validation.h"
#include "aspose/cells_foss/CellArea.h"
int ruleIndex = sheet.GetValidations().Add(CellArea::CreateCellArea("B2", "B3"));
Validation amountRule = sheet.GetValidations()[ruleIndex];
amountRule.SetType(ValidationType::Decimal);
amountRule.SetOperator(OperatorType::GreaterThan);
amountRule.SetFormula1("0");
amountRule.SetErrorTitle("Invalid Amount");
amountRule.SetErrorMessage("Enter a positive number");
מאפייני מסמך והגדרות חוברת עבודה
Workbook::GetDocumentProperties() חושף את שדות המטא-נתונים המרכזיים והמורחבים של OOXML (כותרת, מחבר, חברה, מנהל, ודומים), ו-Workbook::GetSettings() שולט בהתנהגות ברמת חוברת העבודה כגון מערכת התאריכים:
#include "aspose/cells_foss/DocumentProperties.h"
workbook.GetDocumentProperties().SetCompany("Example Corp");
workbook.GetDocumentProperties().SetManager("Finance Team");
workbook.GetSettings().SetDate1904(false);
הערכים הללו עוברים סיבוב שמירה וטעינה מחדש בדיוק כמו תוכן התא, וזה שימושי לדוחות שזקוקים למטא-נתונים עקביים בקבצים שנוצרו.
התחלה מהירה
Aspose.Cells FOSS עבור C++ נבנה מהמקור עם CMake. שכפל את המאגר ובחר להוסיף אותו כתת-ספרייה או למשוך אותו באמצעות FetchContent:
git clone https://github.com/aspose-cells-foss/Aspose.Cells-FOSS-for-Cpp.git
cmake_minimum_required(VERSION 3.15)
project(MyProject CXX)
set(CMAKE_CXX_STANDARD 17)
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
add_executable(MyApp main.cpp)
target_link_libraries(MyApp PRIVATE Aspose.Cells.Foss.Cpp)
דוגמה מינימלית לניהול גיליונות-אלקטרוניים — יצירה, עיצוב, שמירה וטעינה מחדש:
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"
using namespace Aspose::Cells_FOSS;
int main() {
Workbook workbook;
Worksheet& sheet = workbook.GetWorksheets()[0];
sheet.SetName("Expenses");
Cells& cells = sheet.GetCells();
cells["A1"].PutValue("Category");
cells["B1"].PutValue("Amount");
cells["A2"].PutValue("Travel");
cells["B2"].PutValue(482.50);
cells["A3"].PutValue("Supplies");
cells["B3"].PutValue(129.99);
cells["B4"].SetFormula("=SUM(B2:B3)");
workbook.Save("expenses.xlsx");
Workbook loaded("expenses.xlsx");
Cells& loadedCells = loaded.GetWorksheets()["Expenses"].GetCells();
double total = loadedCells["B4"].GetValue().AsDouble();
return 0;
}
פורמטים נתמכים
| פורמט | הרחבה | קריאה | כתיבה |
|---|---|---|---|
| Xlsx | .xlsx | ✓ | ✓ |
LoadFormat ו-SaveFormat מציגים ערך Xlsx יחיד בגרסה זו; הקונסטרוקטורים Workbook(path) ו-Workbook(bytes) טוענים קלט .xlsx, ו-Workbook::Save() כותב פלט .xlsx לנתיב, זרם, או לחוצץ בזיכרון.
קוד פתוח ורישוי
Aspose.Cells FOSS עבור C++ משוחרר תחת רישיון MIT. קוד המקור זמין ב-GitHub, והספרייה ניתנת לשימוש, שינוי והפצה בפרויקטים מסחריים וקוד פתוח ללא דמי זמן ריצה.