Introducere

Gestionarea foilor de calcul este partea din Aspose.Cells FOSS pentru C++ pe care majoritatea programelor o atinge prima dată: Workbook care deține fișierul, obiectele Worksheet din interiorul acestuia și colecția Cells care conține valori, formule și formatare. Acest articol parcurge această suprafață în mai multă profunzime decât o introducere generală — cum sunt create și navigate cărțile de lucru și foile de calcul, cum sunt citite și scrise valorile și formulele celulelor, cum Style, Font, Color și Borders se combină pentru a formata ieșirea, și cum PageSetup, Hyperlink, DefinedName și Validation adaugă structură în jurul grilei brute de celule.

Fiecare clasă acoperită aici face parte din API nativ C++ declarat în antetele aspose/cells_foss/. Nu există interoperabilitate COM și nicio dependență de instalarea Microsoft Excel — biblioteca citește și scrie direct formatul de pachet .xlsx, motiv pentru care versiunea curentă suportă doar .xlsx, atât la încărcare, cât și la salvare.

Exemplele de mai jos se construiesc unul pe baza celuilalt: se creează o carte de lucru, se completează foi de calcul și celule, se aplică stiluri, iar fișierul este salvat și reîncărcat pentru a confirma parcursul complet. Tot codul este adaptat din suitele de compatibilitate, teste de referință și teste unitare ale bibliotecii, astfel încât să reflecte operațiuni testate pe rezultate reale .xlsx.


Funcționalități cheie

Gestionarea cărților de lucru și a foilor de calcul

Un Workbook începe cu o foaie de calcul în WorksheetCollection. Foile de calcul sunt adăugate cu Add(), căutate prin index sau prin nume și redenumite cu SetName(). WorksheetCollection urmărește, de asemenea, care foaie este activă:

#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

Salvarea și reîncărcarea trec prin același tip Workbook. Workbook::Save() acceptă o cale de fișier, iar un Workbook poate fi construit direct dintr-o cale sau dintr-un buffer de octeți în memorie, care face round-trip al valorilor celulelor și al formularelor:

workbook.Save("report.xlsx");

Workbook loaded("report.xlsx");
Worksheet& reloadedSheet = loaded.GetWorksheets()["Data"];

Valori ale celulelor și formule

Cells, accesat prin Worksheet::GetCells(), indexează celulele prin referință în stil A1. Cell::PutValue() acceptă șiruri de caractere, întregi, double și valori booleene, SetFormula() stochează un șir de formulă Excel, iar GetValue() returnează un CellValue cu accesori tipizați (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() raportează CellValueType stocat (Blank, String, Number, Boolean, DateTime, sau Formula), iar GetDisplayStringValue() returnează valoarea formatată în modul în care ar apărea în Excel, respectând orice format de număr aplicat prin Style.

Stilizare cu Stil, Font, Culoare și Borduri

Cell::GetStyle() returnează un obiect Style care poate fi modificat și reaplicat cu SetStyle(). Style expune un Font, un set Borders, model de umplere și culoare, aliniere și format numeric:

#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 este un tip de valoare: citirea înapoi cu GetStyle() reflectă orice a fost setat ultima dată cu SetStyle(), ceea ce îl face simplu să construiești un stil și să îl aplici pe un rând de antet sau pe un interval de celule de date.

Configurare pagină și configurare imprimare

Worksheet::GetPageSetup() returnează un obiect PageSetup care acoperă dimensiunea hârtiei, orientarea, marginile, scalarea, titlurile de imprimare și întreruperile de pagină:

#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);

Marginile sunt disponibile atât în unități brute (GetLeftMargin()), cât și în inci (GetLeftMarginInch()), iar GetHorizontalPageBreaks() / GetVerticalPageBreaks() returnează pozițiile întreruperilor de pagină setate în prezent pe foaie.

Hiperlinkuri, Nume definite și Validare a datelor

Worksheet::GetHyperlinks() returnează un HyperlinkCollection. Add() primește o celulă sau un interval țintă plus o adresă și returnează indexul noului hiperlink, care este utilizat pentru a prelua obiectul Hyperlink pentru modificări suplimentare:

#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() gestionează intervalele denumite în același mod — Add() returnează un index în 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() urmează același model de colecție pentru regulile de validare a datelor, cu domeniu limitat la un 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");

Proprietăți ale documentului și setări ale registrului de lucru

Workbook::GetDocumentProperties() expune câmpurile de metadate OOXML de bază și extinse (titlu, autor, companie, manager și altele similare), iar Workbook::GetSettings() controlează comportamentul la nivel de registru de lucru, cum ar fi sistemul de date:

#include "aspose/cells_foss/DocumentProperties.h"

workbook.GetDocumentProperties().SetCompany("Example Corp");
workbook.GetDocumentProperties().SetManager("Finance Team");

workbook.GetSettings().SetDate1904(false);

Aceste valori trec prin salvare și reîncărcare în același mod ca conținutul celulelor, ceea ce este util pentru rapoartele care necesită metadate consecvente în fișierele generate.


Începe rapid

Aspose.Cells FOSS pentru C++ este construit din sursă cu CMake. Clonați depozitul și fie îl adăugați ca subdirector, fie îl aduceți cu 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)

Un exemplu minimal de gestionare a foii de calcul — creează, stilizează, salvează și reîncarcă:

#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;
}

Formate suportate

FormatExtensieCiteșteScrie
Xlsx.xlsx✓✓

LoadFormat și SaveFormat expun ambele o singură valoare Xlsx în această versiune; constructorii Workbook(path) și Workbook(bytes) încarcă intrarea .xlsx, iar Workbook::Save() scrie ieșirea .xlsx într-o cale, un flux sau un buffer în memorie.


Open Source și Licențiere

Aspose.Cells FOSS pentru C++ este lansat sub licența MIT. Codul sursă este disponibil pe GitHub, iar biblioteca poate fi utilizată, modificată și redistribuită în proiecte comerciale și open-source fără taxe de rulare.


Primii pași

Resurse conexe