Inleiding
Aspose.Cells FOSS voor C++ is opgebouwd uit twee lagen. De laag die de meeste code raakt, is de façade: Workbook, Worksheet, Cell en Style, wat wordt behandeld in de aankondigings- en functiebeschrijvingsposts voor dit platform. Daaronder bevindt zich een tweede laag, in de Aspose::Cells_FOSS::Core-namespace, bestaande uit eenvoudige gegevensrecords — WorkbookModel, WorksheetModel, CellRecord, StyleValue en ongeveer vierdozijn verwante *Model- en *Value-typen. Deze records bevatten de feitelijke geparseerde spreadsheet-status: celwaarden geïndiceerd door CellAddress, stijlkenmerken als StyleValue, werkboek- en werkblad-instellingen, paginainstelling, filters en diagnostiek bij het laden. De façade-klassen lezen uit en schrijven naar deze laag in plaats van zelf de status op te slaan.
De brug tussen de twee lagen is expliciet en openbaar. Workbook::GetModel() retourneert een Core::WorkbookModel, Worksheet::GetModel() retourneert een Core::WorksheetModel, en Style::ToCore()/Style::FromCore() converteren een mutabele Style naar en van een Core::StyleValue. DocumentProperties::GetModel() en ExtendedDocumentProperties::GetModel() doen hetzelfde voor documentmetadata. Een gebruiker benadert deze laag rechtstreeks in een kleiner aantal gevallen dan bij het alledaagse celbewerkingsAPI: het inspecteren van de DiagnosticBag die is vastgelegd tijdens het laden of opslaan van een werkboek, het normaliseren van een stijl via de werkboek-niveau StyleRepository, of rechtstreeks werken met de plain-old-data cel- en rijrecords i.p.v. de Cell/Row wrapper-objecten.
Alles wat hier wordt beschreven wordt geleverd in dezelfde MIT-gelicentieerde, afhankelijkheids-vrije bronboom als de rest van Aspose.Cells FOSS voor C++, gebouwd met CMake en opgenomen als header- en bronbestanden in plaats van als een vooraf gebouwde binary. Als je nog niet met de façade-API hebt gewerkt, begin dan eerst met de post over Workbook/Worksheet/Cell-functionaliteiten — deze post gaat uit van die basis en richt zich op wat eronder zit.
Wat er inbegrepen is
De Workbook- en Worksheet-modelboom
Core::WorkbookModel is het hoofdrecord. GetWorksheets() retourneert een std::deque<WorksheetModel>, GetSettings() een WorkbookSettingsModel, GetProperties() een WorkbookPropertiesModel, GetDocumentProperties() een DocumentPropertiesModel, GetDiagnostics() een DiagnosticBag, GetStyles() een StyleRepository, GetSharedStrings() een SharedStringRepository, en GetDefaultStyle()/SetDefaultStyle() een StyleValue. Het houdt ook GetActiveSheetIndex() en een std::vector<DefinedNameModel> uit GetDefinedNames() bij. Workbook::GetModel() is het toegangspunt tot dit record.
Core::WorksheetModel, bereikt via Worksheet::GetModel(), slaat cellen op als std::unordered_map<CellAddress, CellRecord> via GetCells(), rijen als std::unordered_map<int, RowModel> via GetRows(), kolombereiken als std::vector<ColumnRangeModel> via GetColumns(), en samengevoegde bereiken als std::vector<MergeRegion> via GetMergeRegions(). Het bevat ook GetHyperlinks(), GetValidations(), GetConditionalFormattings(), GetPageSetup(), GetView(), GetProtection(), GetAutoFilter(), GetTabColor(), en GetVisibility() (een SheetVisibility waarde: Visible, Hidden, of VeryHidden).
CellAddress is het hashbare sleutelformaat dat voor die cellenkaart wordt gebruikt. Het parseert A1-stijltekst naar nulgebaseerde rij-/kolom-indexen en terug — dit is een van de weinige klassen in deze groep met directe testdekking in de FOSS-repo:
#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 bevat de CellValue, CellValueKind, een optionele formule-string, een StyleValue, en een GetIsExplicitlyStored()-vlag die een cel die daadwerkelijk is geschreven onderscheidt van een cel die alleen bestaat omdat een standaard-rij of -kolom ernaar verwijst. RowModel draagt een optionele hoogte, een verborgen-vlag, en een optionele stijl-index; ColumnRangeModel omvat dezelfde drie plus de min/max kolom-span waartoe hij geldt. MergeRegion is een eenvoudige rechthoek met eerste-rij/eerste-kolom/totaal-rijen/totaal-kolommen.
Stijldata als platte waarden
StyleValue is de Core tegenhanger van de wijzigbare Style façade — Style::ToCore() zet een Style om naar een, en Style::FromCore() bouwt een Style op basis van een. Het groepeert GetFont() (FontValue), GetPattern() (FillPatternKind), GetForegroundColor() / GetBackgroundColor() (ColorValue), GetBorders() (BordersValue), GetAlignment() (AlignmentValue), GetProtection() (ProtectionValue), en GetNumberFormat() (NumberFormatValue), plus een statische StyleValue::Default() en een Clone(). FontValue spiegelt het Font-veld voor veld: naam, grootte, vet, cursief, onderstrepen, doorhalen, en een ColorValue. ColorValue zelf is een eenvoudige ARGB-tuple (GetA(), GetR(), GetG(), GetB(), Equals(), GetHashCode()) — in tegenstelling tot de façade-klasse Color heeft het geen FromArgb()-stijl-fabriek, zodat een ColorValue normaal gesproken wordt verkregen van een bestaande stijl in plaats van rechtstreeks te worden geconstrueerd.
BordersValue bevat vijf BorderSideValue leden — links, rechts, boven, onder en diagonaal — elk koppelend een BorderStyle enum-waarde met een ColorValue. AlignmentValue modelleert horizontale en verticale uitlijning, tekstomloop, insprongniveau, tekstrotatie, krimpen-naar-passen, en leesvolgorde. ProtectionValue en NumberFormatValue ondersteunen de celbeschermings-vlaggen en het getal-opmaak-id/aangepaste-tekenreeks-paar dat Style blootlegt.
StyleRepository, bereikt via WorkbookModel::GetStyles(), biedt één bewerking: Normalize(style) -> StyleValue. Het werkboek gebruikt deze intern tijdens het laden en opslaan om equivalente stijlen te interniseren in plaats van identieke StyleValue records te dupliceren — het is geen algemene stijl-cache met indexgebaseerd opvragen in de huidige API-laag.
Documenteigenschappen en werkboek-instellingen
DocumentPropertiesModel groepeert GetCore() (CoreDocumentPropertiesModel: title, subject, creator, keywords, description, last-modified-by, revision, category, content status, en created/modified timestamps) en GetExtended() (ExtendedDocumentPropertiesModel: application, app version, company, manager, doc security, hyperlink base, en de scale-crop / links-up-to-date / shared-doc vlaggen). DocumentProperties::GetModel() en ExtendedDocumentProperties::GetModel() vormen de brug van de façadeklassen naar deze records.
WorkbookPropertiesModel spiegelt WorkbookProperties — code name, show-objects, filter privacy, backup-file, en verwante vlaggen — en nestelt 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) en CalculationPropertiesModel (calculation mode, iteration settings, full precision, concurrent calculation). WorkbookSettingsModel bevat een DateSystem waarde (Windows1900 of Mac1904) en een weergave-cultuur — het model-niveau tegenhanger van WorkbookSettings::GetDate1904() / GetCulture(). De meeste *Model typen in deze groep tonen CopyFrom(source) en HasStoredState(), die de serializer gebruikt om een expliciet ingestelde waarde van een niet-ingestelde standaard te onderscheiden vóór het wegschrijven van XML.
Werkblad Functiemodellen
WorksheetProtectionModel spiegelt WorksheetProtection veld voor veld en voegt de opgeslagen wachtwoordvelden toe — GetPasswordHash(), GetAlgorithmName(), GetHashValue(), GetSaltValue(), GetSpinCount() — die de façade WorksheetProtection niet direct blootlegt. WorksheetViewModel bevat rasterlijn-, kop- en nul-zichtbaarheid, rechts-naar-links-indeling en zoom-schaal. PageSetupModel nestelt PageMarginsModel (linker/rechter/boven/onder/kop-/voettekstmarges als doubles), PrintOptionsModel (rasterlijnen, koppen, horizontaal en verticaal centreren) en HeaderFooterModel (tekst links/midden/rechts in kop- en voettekst), naast papiersoort, oriëntatie, schaal, passend-bij-breedte/hoogte, afdrukgebied, afdruktitel-rijen/kolommen en pagina-breuk-vectoren.
AutoFilterModel bevat een bereik-string, een std::vector<FilterColumnModel> en een AutoFilterSortStateModel. FilterColumnModel nestelt op zijn beurt AutoFilterColorFilterModel, AutoFilterDynamicFilterModel en AutoFilterTop10Model, plus een eenvoudige lijst van filter-waarde-strings en een std::vector<AutoFilterCustomFilterModel>. ConditionalFormattingModel koppelt een std::vector<CellArea> aan een std::vector<FormatConditionModel> — elke voorwaarde draagt zijn type, operator, formules, kleur-schaal/data-bar/pictogram-set velden, en een StyleValue voor het resulterende formaat. ValidationModel en HyperlinkModel spiegelen de Validation en Hyperlink façades als eenvoudige records, en DefinedNameModel spiegelt DefinedName. SheetVisibility is de model-laag enum achter Worksheet::GetVisibilityType().
Enkele van de façade-eigenschappen die deze records ondersteunen — AutoFilter en ConditionalFormattingCollection in het bijzonder — worden in de productdocumentatie genoemd als nog in actieve ontwikkeling voor deze release. Beschouw de bovenstaande structuren als het structurele doel waar het model en de serializer omheen gebouwd zijn, in plaats van als een garantie dat elk veld vandaag nog correct wordt doorgevoerd bij het opslaan van een werkmap.
Diagnostiek en Gedeelde Status
DiagnosticBag, bereikt via WorkbookModel::GetDiagnostics(), verzamelt DiagnosticEntry records — elk met een GetCode(), een GetSeverity() (DiagnosticSeverity: Warning, Recoverable, of LossyRecoverable), een GetMessage(), een GetRepairApplied() vlag, en een GetDataLossRisk() vlag — gegenereerd terwijl een werkmap wordt geparseerd of geserialiseerd. Dit loopt gelijktijdig met Workbook::GetLoadDiagnostics(), waarvan de façade-niveau LoadDiagnostics / LoadIssue typen dezelfde DiagnosticSeverity enum delen; code die het ruwe model-record nodig heeft in plaats van de LoadIssue wrapper, bereikt dit via GetDiagnostics() op het werkmap-model.
SharedStringRepository ondersteunt de xlsx shared-strings-tabel: GetValues() geeft de geïnterneerde tekenreeks-vector terug, TryGetValue(index, value) zet een index om naar tekst, en Intern(value) voegt een invoer toe of hergebruikt er een — gebruikt intern wanneer SaveOptions::SetUseSharedStrings(true) is ingesteld. DateSerialConverter converteert tussen een DateTime en het OLE-stijl seriële getal dat Excel in een cel opslaat, met een DateSystem zodat 1900- en 1904-gebaseerde werkboeken naar dezelfde kalenderdatum worden gedecodeerd.
Snelstart
Voeg de bibliotheek toe aan een CMake-project als subdirectory en link het target dat het definieert:
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
target_link_libraries(MyApp PRIVATE Aspose.Cells.Foss.Cpp)
Het onderstaande voorbeeld schrijft een cel via de façade, daarna wordt het onderliggende model benaderd voor een diagnostische zak en een CellAddress-parse — dezelfde operatie die WorksheetModel::GetCells() intern gebruikt om zijn cel-map te indexeren:
#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;
}
Ondersteunde formaten
| Formaat | Extensie | Lezen | Schrijven |
|---|---|---|---|
| XLSX | .xlsx | ✓ | ✓ |
De hier beschreven modellaag is de in-memory-representatie waarop de xlsx-lezer en -schrijver opereren; hij is zelf niet gekoppeld aan een extra bestandsformaat buiten de Xlsx-import/export die de rest van de bibliotheek ondersteunt.
Open source & licenties
Aspose.Cells FOSS voor C++ is gelicentieerd onder de MIT-licentie. Broncode, inclusief de Aspose::Cells_FOSS::Core model-headers die in dit bericht worden genoemd, staat op GitHub; commercieel gebruik, wijziging en herdistributie zijn toegestaan.