Introducere

Aspose.Cells FOSS pentru C++ este construit ca două straturi. Stratul cu care atinge cel mai mult codul este fațada: Workbook, Worksheet, Cell și Style, care este subiectul anunțurilor și articolelor de funcționalitate pentru această platformă. Sub el se află un al doilea strat, în spațiul de nume Aspose::Cells_FOSS::Core, alcătuit din înregistrări de date simple — WorkbookModel, WorksheetModel, CellRecord, StyleValue și aproximativ patruzeci de tipuri înrudite *Model și *Value. Aceste înregistrări conțin starea efectivă parsată a foilor de calcul: valori de celule indexate prin CellAddress, atribute de stil ca StyleValue, setări ale registrului de lucru și ale foii de lucru, configurarea paginii, filtre și diagnostice de încărcare. Clasele fațadă citesc și scriu în acest strat în loc să stocheze starea ele însele.

Puntea dintre cele două straturi este explicită și publică. Workbook::GetModel() returnează un Core::WorkbookModel, Worksheet::GetModel() returnează un Core::WorksheetModel, și Style::ToCore() / Style::FromCore() convertesc un Style mutabil în și dintr-un Core::StyleValue. DocumentProperties::GetModel() și ExtendedDocumentProperties::GetModel() fac același lucru pentru metadatele documentului. Un consumator apelează acest strat direct într-un set mai restrâns de cazuri decât API de editare zilnică a celulelor: inspectarea DiagnosticBag înregistrat în timp ce un registru de lucru era încărcat sau salvat, normalizarea unui stil prin StyleRepository la nivel de registru de lucru, sau lucrul direct cu înregistrările de tip plain-old-data ale celulelor și rândurilor în loc de obiectele învelitoare Cell / Row.

Tot ce este descris aici este livrat în același arbore de surse cu licență MIT, fără dependențe, ca restul Aspose.Cells FOSS pentru C++, construit cu CMake și inclus ca fișiere header și sursă în loc de un binar precompilat. Dacă nu ați lucrat încă cu fațada API, începeți mai întâi cu articolul despre funcționalitățile Workbook/Worksheet/Cell — acest articol presupune acea bază și se concentrează pe ceea ce se află dedesubt.


Ce este inclus

Arborele modelului Workbook și Worksheet

Core::WorkbookModel este înregistrarea rădăcină. GetWorksheets() returnează un std::deque<WorksheetModel>, GetSettings() un WorkbookSettingsModel, GetProperties() un WorkbookPropertiesModel, GetDocumentProperties() un DocumentPropertiesModel, GetDiagnostics() un DiagnosticBag, GetStyles() un StyleRepository, GetSharedStrings() un SharedStringRepository, și GetDefaultStyle() / SetDefaultStyle() un StyleValue. De asemenea, urmărește GetActiveSheetIndex() și un std::vector<DefinedNameModel> din GetDefinedNames(). Workbook::GetModel() este punctul de intrare în această înregistrare.

Core::WorksheetModel, accesat prin Worksheet::GetModel(), stochează celulele ca std::unordered_map<CellAddress, CellRecord> prin GetCells(), rândurile ca std::unordered_map<int, RowModel> prin GetRows(), intervalele de coloane ca std::vector<ColumnRangeModel> prin GetColumns() și intervalele fuzionate ca std::vector<MergeRegion> prin GetMergeRegions(). De asemenea, conține GetHyperlinks(), GetValidations(), GetConditionalFormattings(), GetPageSetup(), GetView(), GetProtection(), GetAutoFilter(), GetTabColor() și GetVisibility() (o valoare SheetVisibility: Visible, Hidden sau VeryHidden).

CellAddress este tipul de cheie hashabil utilizat pentru acea hartă de celule. Analizează text în stil A1 în indici de rând/coloană cu bază zero și invers — aceasta este una dintre puținele clase din acest cluster cu acoperire de testare directă în depozitul FOSS:

#include "aspose/cells_foss/core/CellAddress.h"

using namespace Aspose::Cells_FOSS;

Core::CellAddress parsed = Core::CellAddress::Parse("AB3");
// parsed.GetRowIndex()    == 2    (zero-based row index)
// parsed.GetColumnIndex() == 27   (zero-based column index)
// parsed.ToString()       == "AB3"

CellRecord conține CellValue, CellValueKind, un șir de formulă opțional, un StyleValue și un indicator GetIsExplicitlyStored() care distinge o celulă scrisă efectiv de una care există doar pentru că o valoare implicită a unui rând sau a unei coloane o atinge. RowModel poartă o înălțime opțională, un indicator ascuns și un indice de stil opțional; ColumnRangeModel poartă aceleași trei plus intervalul minim/maxim de coloane la care se aplică. MergeRegion este un simplu dreptunghi primul-rând/prima-coloană/total-rânduri/total-coloane.

Date de stil ca valori simple

StyleValue este echivalentul Core al fațadei mutabile StyleStyle::ToCore() convertește un Style într-unul, iar Style::FromCore() construiește un Style dintr-unul. Grupa GetFont() (FontValue), GetPattern() (FillPatternKind), GetForegroundColor() / GetBackgroundColor() (ColorValue), GetBorders() (BordersValue), GetAlignment() (AlignmentValue), GetProtection() (ProtectionValue) și GetNumberFormat() (NumberFormatValue), plus un StyleValue::Default() static și un Clone(). FontValue reflectă câmpul Font pentru fiecare: name, size, bold, italic, underline, strike-through și un ColorValue. ColorValue este în sine un tuplu ARGB simplu (GetA(), GetR(), GetG(), GetB(), Equals(), GetHashCode()) — spre deosebire de clasa fațadă Color, nu are o fabrică de tip FromArgb(), așa că un ColorValue este de obicei obținut dintr-un stil existent în loc să fie construit direct.

BordersValue conține cinci membri BorderSideValue — left, right, top, bottom și diagonal — fiecare asociind o valoare enum BorderStyle cu un ColorValue. AlignmentValue modelează alinierea orizontală și verticală, înfășurarea textului, nivelul de indentare, rotația textului, micșorarea pentru potrivire și ordinea de citire. ProtectionValue și NumberFormatValue susțin indicatorii de protecție a celulei și perechea id/formă de număr personalizată pe care Style o expune.

StyleRepository, accesat prin WorkbookModel::GetStyles(), expune o operație: Normalize(style) -> StyleValue. Registrul de lucru îl folosește intern în timpul încărcării și salvării pentru a interna stiluri echivalente în loc să duplice înregistrări StyleValue identice — nu este o memorie cache de stiluri cu scop general cu căutare pe bază de index în suprafața curentă API.

Proprietăți ale documentului și setări la nivel de registru de lucru

DocumentPropertiesModel grupează GetCore() (CoreDocumentPropertiesModel: title, subject, creator, keywords, description, last-modified-by, revision, category, content status, și created/modified timestamps) și GetExtended() (ExtendedDocumentPropertiesModel: application, app version, company, manager, doc security, hyperlink base, și scale-crop / links-up-to-date / shared-doc flags). DocumentProperties::GetModel() și ExtendedDocumentProperties::GetModel() leagă clasele fațadă de aceste înregistrări.

WorkbookPropertiesModel reflectă WorkbookProperties — code name, show-objects, filter privacy, backup-file și marcajele aferente — și cuibărește WorkbookProtectionModel (lock structure/windows/revision, workbook and revisions password), WorkbookViewModel (window position and size, first visible sheet, scroll-bar and sheet-tab visibility, tab ratio, minimized state, auto-filter date grouping) și CalculationPropertiesModel (calculation mode, iteration settings, full precision, concurrent calculation). WorkbookSettingsModel conține o valoare DateSystem (Windows1900 sau Mac1904) și o cultură de afișare — omologul la nivel de model al WorkbookSettings::GetDate1904() / GetCulture(). Majoritatea tipurilor *Model din acest grup expun CopyFrom(source) și HasStoredState(), pe care serializer-ul le folosește pentru a diferenția o valoare setată explicit de o valoare implicită nedefinită înainte de a scrie XML.

Modele de caracteristici ale foii de lucru

WorksheetProtectionModel reflectă câmpul WorksheetProtection câmp cu câmp și adaugă câmpurile de parolă stocate — GetPasswordHash(), GetAlgorithmName(), GetHashValue(), GetSaltValue(), GetSpinCount() — pe care fațada WorksheetProtection nu le expune direct. WorksheetViewModel conține vizibilitatea liniilor de grilă, a antetului și a zero-ului, aranjamentul de la dreapta la stânga și scala de zoom. PageSetupModel cuibărește PageMarginsModel (margini left/right/top/bottom/header/footer ca valori double), PrintOptionsModel (grid lines, headings, horizontal and vertical centering), și HeaderFooterModel (left/center/right header and footer text), alături de dimensiunea hârtiei, orientare, scară, fit-to-width/height, zonă de imprimare, rânduri/coloane de titlu de imprimare și vectori de întrerupere a paginii.

AutoFilterModel conține un șir de interval, un std::vector<FilterColumnModel> și un AutoFilterSortStateModel. FilterColumnModel la rândul său cuibărește AutoFilterColorFilterModel, AutoFilterDynamicFilterModel și AutoFilterTop10Model, plus o listă simplă de șiruri de valori de filtru și un std::vector<AutoFilterCustomFilterModel>. ConditionalFormattingModel asociază un std::vector<CellArea> cu un std::vector<FormatConditionModel> — fiecare condiție având tipul, operatorul, formulele, câmpurile color-scale/data-bar/icon-set și un StyleValue pentru formatul rezultat. ValidationModel și HyperlinkModel reflectă fațadele Validation și Hyperlink ca înregistrări simple, iar DefinedNameModel reflectă DefinedName. SheetVisibility este enumul de nivel model din spatele Worksheet::GetVisibilityType().

Unele dintre funcționalitățile fațadei pe care aceste înregistrări le susțin — în special AutoFilter și ConditionalFormattingCollection — sunt menționate în documentația produsului ca fiind încă în dezvoltare activă în această versiune. Tratați formele de mai sus ca ținta structurală în jurul căreia sunt construite modelul și serializer-ul, nu ca o garanție că fiecare câmp face round-trip printr-un registru de lucru salvat în prezent.

Diagnosticare și Stare Partajată

DiagnosticBag, accesat prin WorkbookModel::GetDiagnostics(), colectează înregistrări DiagnosticEntry — fiecare cu un GetCode(), un GetSeverity() (DiagnosticSeverity: Warning, Recoverable sau LossyRecoverable), un GetMessage(), un indicator GetRepairApplied() și un indicator GetDataLossRisk() — generate în timpul parsării sau serializării unui registru de lucru. Acest proces rulează alături de Workbook::GetLoadDiagnostics(), al cărui tipuri la nivel de fațadă LoadDiagnostics / LoadIssue împărtășesc același enum DiagnosticSeverity; codul care are nevoie de înregistrarea modelului brut în locul învelișului LoadIssue o accesează prin GetDiagnostics() pe modelul registrului de lucru.

SharedStringRepository susține tabelul shared-strings al xlsx: GetValues() returnează vectorul de șiruri interne, TryGetValue(index, value) rezolvă un index înapoi la text și Intern(value) adaugă sau reutilizează o intrare — utilizat intern când SaveOptions::SetUseSharedStrings(true) este setat. DateSerialConverter convertește între un DateTime și numărul de serie în stil OLE pe care Excel îl stochează într-o celulă, luând un DateSystem astfel încât registrele bazate pe 1900 și 1904 să se decodeze la aceeași dată calendaristică.


Începe rapid

Adăugați biblioteca la un proiect CMake ca subdirector și legați ținta pe care o definește:

add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
target_link_libraries(MyApp PRIVATE Aspose.Cells.Foss.Cpp)

Exemplul de mai jos scrie o celulă prin fațadă, apoi accesează modelul subiacent pentru un pachet de diagnostic și o analiză CellAddress — aceeași operație pe care WorksheetModel::GetCells() o folosește intern pentru a indexa harta de celule:

#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"
#include "aspose/cells_foss/core/CellAddress.h"
#include <iostream>

using namespace Aspose::Cells_FOSS;

int main() {
    Workbook workbook;
    Worksheet& sheet = workbook.GetWorksheets()[0];
    sheet.SetName("Report");
    sheet.GetCells()["A1"].PutValue("Total");
    workbook.Save("report.xlsx");

    Core::CellAddress address = Core::CellAddress::Parse("A1");
    std::cout << "Row: " << address.GetRowIndex()
              << " Column: " << address.GetColumnIndex() << "\n";

    for (const auto& entry : workbook.GetModel().GetDiagnostics().GetEntries()) {
        std::cout << "Diagnostic: " << entry.GetMessage() << "\n";
    }

    return 0;
}

Formate suportate

FormatExtensieCitireScriere
XLSX.xlsx

Stratul de model descris aici este reprezentarea în memorie pe care cititorul și scriitorul xlsx operează; nu este legat de niciun format de fișier suplimentar în afara importului/exportului Xlsx pe care restul bibliotecii îl suportă.


Open Source & Licențiere

Aspose.Cells FOSS pentru C++ este licențiată sub MIT. Codul sursă, inclusiv antetele de model Aspose::Cells_FOSS::Core menționate în această postare, se află pe GitHub; utilizarea comercială, modificarea și redistribuirea sunt permise.


Începeți

Resurse conexe