Introduktion
Aspose.Cells FOSS för C++ är byggt som två lager. Lagret som mest kod berör är fasaden: Workbook, Worksheet, Cell och Style, vilket är vad tillkännagivande- och funktionsinläggen för den här plattformen täcker. Under det sitter ett andra lager, i Aspose::Cells_FOSS::Core namnrymden, bestående av enkla dataregister — WorkbookModel, WorksheetModel, CellRecord, StyleValue och ungefär fyra dussin relaterade *Model och *Value-typer. Dessa register innehåller det faktiska tolkade kalkylblads-tillståndet: cellvärden nycklade efter CellAddress, stilattribut som StyleValue, arbetsbok- och arbetsbladsinställningar, sidinställning, filter och inläsningsdiagnostik. Fasadklasserna läser från och skriver till detta lager istället för att lagra tillstånd själva.
Bron mellan de två lagren är explicit och offentlig. Workbook::GetModel() returnerar en Core::WorkbookModel, Worksheet::GetModel() returnerar en Core::WorksheetModel, och Style::ToCore() / Style::FromCore() konverterar en muterbar Style till och från en Core::StyleValue. DocumentProperties::GetModel() och ExtendedDocumentProperties::GetModel() gör samma sak för dokumentmetadata. En konsument når detta lager direkt i ett smalare antal fall än den vardagliga cellredigerings-API: inspektera den DiagnosticBag som registrerades medan en arbetsbok laddades eller sparades, normalisera en stil via arbetsboksnivå-StyleRepository, eller arbeta med de rena data-cellerna och radrekorden direkt istället för Cell / Row omslagsobjekten.
Allt som beskrivs här levereras i samma MIT-licensierade, beroendefria källkodsträd som resten av Aspose.Cells FOSS för C++, byggt med CMake och inkluderat som rubriker och källkod snarare än en förbyggd binär. Om du ännu inte har arbetat med fasad API, börja med inlägget om Workbook/Worksheet/Cell-funktioner först — detta inlägg förutsätter den grunden och fokuserar på vad som ligger under den.
Vad som ingår
Arbetsbok- och arbetsbladsmodells-trädet
Core::WorkbookModel är rotposten. GetWorksheets() returnerar en std::deque<WorksheetModel>, GetSettings() en WorkbookSettingsModel, GetProperties() en WorkbookPropertiesModel, GetDocumentProperties() en DocumentPropertiesModel, GetDiagnostics() en DiagnosticBag, GetStyles() en StyleRepository, GetSharedStrings() en SharedStringRepository, och GetDefaultStyle() / SetDefaultStyle() en StyleValue. Den spårar också GetActiveSheetIndex() och en std::vector<DefinedNameModel> från GetDefinedNames(). Workbook::GetModel() är ingångspunkten till denna post.
Core::WorksheetModel, nås genom Worksheet::GetModel(), lagrar celler som std::unordered_map<CellAddress, CellRecord> via GetCells(), rader som std::unordered_map<int, RowModel> via GetRows(), kolumnintervall som std::vector<ColumnRangeModel> via GetColumns(), och sammanslagna intervall som std::vector<MergeRegion> via GetMergeRegions(). Den innehåller också GetHyperlinks(), GetValidations(), GetConditionalFormattings(), GetPageSetup(), GetView(), GetProtection(), GetAutoFilter(), GetTabColor() och GetVisibility() (ett SheetVisibility värde: Visible, Hidden eller VeryHidden).
CellAddress är den hashbara nyckeltypen som används för den cellkartan. Den parsar A1-stiltext till nollbaserade rad-/kolumnindex och tillbaka — detta är en av de få klasserna i detta kluster med direkt testtäckning i det 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 innehåller en cells CellValue, CellValueKind, en valfri formelsträng, en StyleValue och en GetIsExplicitlyStored()-flagga som skiljer en cell som faktiskt har skrivits från en som bara finns eftersom en rad- eller kolumnstandard berör den. RowModel har en valfri höjd, en dold flagga och ett valfritt stil-index; ColumnRangeModel har samma tre plus min/max-kolumnspann som den gäller för. MergeRegion är en enkel rektangel för första rad/första kolumn/antal rader/antal kolumner.
Stildata som rena värden
StyleValue är Core-motsvarigheten till den muterbara Style fasaden — Style::ToCore() konverterar en Style till en sådan, och Style::FromCore() bygger en Style från en sådan. Den grupperar GetFont() (FontValue), GetPattern() (FillPatternKind), GetForegroundColor() / GetBackgroundColor() (ColorValue), GetBorders() (BordersValue), GetAlignment() (AlignmentValue), GetProtection() (ProtectionValue) och GetNumberFormat() (NumberFormatValue), plus en statisk StyleValue::Default() och en Clone(). FontValue speglar Font fält för fält: namn, storlek, fet, kursiv, understruken, genomstruken och en ColorValue. ColorValue själv är en enkel ARGB tuple (GetA(), GetR(), GetG(), GetB(), Equals(), GetHashCode()) — till skillnad från fasadklassen Color har den ingen FromArgb()-stilfabrik, så en ColorValue erhålls normalt från en befintlig stil snarare än att konstrueras direkt.
BordersValue innehåller fem BorderSideValue-medlemmar — vänster, höger, topp, botten och diagonal — där varje parar ett BorderStyle-enumvärde med en ColorValue. AlignmentValue modellerar horisontell och vertikal justering, radbrytning, indenteringsnivå, textrotation, krympa-till-passning och läsordning. ProtectionValue och NumberFormatValue stödjer cellskydds-flaggorna samt nummerformat-id/egen-sträng-paret som Style exponerar.
StyleRepository, nås genom WorkbookModel::GetStyles(), exponerar en operation: Normalize(style) -> StyleValue. Arbetsboken använder den internt vid inläsning och sparande för att internalisera motsvarande stilar snarare än att duplicera identiska StyleValue-poster — den är inte en allmän stil-cache med indexbaserad uppslagning i den nuvarande API-ytan.
Dokumentegenskaper och arbetsboksnivåinställningar
DocumentPropertiesModel grupperar GetCore() (CoreDocumentPropertiesModel: title, subject, creator, keywords, description, last-modified-by, revision, category, content status, och created/modified tidsstämplar) och GetExtended() (ExtendedDocumentPropertiesModel: application, app version, company, manager, doc security, hyperlink base, och flaggorna scale-crop / links-up-to-date / shared-doc). DocumentProperties::GetModel() och ExtendedDocumentProperties::GetModel() länkar från fasadklasserna till dessa poster.
WorkbookPropertiesModel speglar WorkbookProperties — code name, show-objects, filter privacy, backup-file, och relaterade flaggor — och kapslar 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), och CalculationPropertiesModel (calculation mode, iteration settings, full precision, concurrent calculation). WorkbookSettingsModel bär ett DateSystem värde (Windows1900 eller Mac1904) och en visningskultur — modellnivåns motsvarighet till WorkbookSettings::GetDate1904() / GetCulture(). De flesta *Model typer i denna grupp exponerar CopyFrom(source) och HasStoredState(), vilka serialiseraren använder för att skilja ett explicit satt värde från en odefinierad standard innan XML skrivs.
Modeller för arbetsbladsfunktioner
WorksheetProtectionModel speglar WorksheetProtection fält för fält och lägger till de lagrade lösenordsfälten — GetPasswordHash(), GetAlgorithmName(), GetHashValue(), GetSaltValue(), GetSpinCount() — som fasaden WorksheetProtection inte visar direkt. WorksheetViewModel innehåller rutnätslinje, rubrik och noll-synlighet, layout från höger till vänster, och zoomnivå. PageSetupModel kapslar PageMarginsModel (vänster/höger/överkant/nedkant/rubrik/fot-marginaler som dubbelvärden), PrintOptionsModel (rutnätslinjer, rubriker, horisontell och vertikal centrering), och HeaderFooterModel (vänster/center/höger rubrik- och fottext), samt papperstorlek, orientering, skala, anpassa till bredd/höjd, utskriftsområde, utskriftsrubrik rader/kolumner, och sidbrytningsvektorer.
AutoFilterModel innehåller en intervallsträng, en std::vector<FilterColumnModel>, och en AutoFilterSortStateModel. FilterColumnModel kapslar i sin tur AutoFilterColorFilterModel, AutoFilterDynamicFilterModel, och AutoFilterTop10Model, samt en enkel lista med filtervärdesträngar och en std::vector<AutoFilterCustomFilterModel>. ConditionalFormattingModel parar ihop en std::vector<CellArea> med en std::vector<FormatConditionModel> — varje villkor bär sin typ, operator, formler, färgskala/data-stapel/ikon-set fält, och en StyleValue för det resulterande formatet. ValidationModel och HyperlinkModel speglar Validation och Hyperlink fasaderna som enkla poster, och DefinedNameModel speglar DefinedName. SheetVisibility är modelllagrets uppräkning bakom Worksheet::GetVisibilityType().
Vissa av fasadfunktionerna som dessa poster stödjer — AutoFilter och ConditionalFormattingCollection i synnerhet — nämns i produktdokumentationen som fortfarande under aktiv utveckling i denna version. Behandla formerna ovan som det strukturella mål som modellen och serialiseraren är byggda kring snarare än en garanti för att varje fält går igenom en sparad arbetsbok idag.
Diagnostik och delat tillstånd
DiagnosticBag, nås via WorkbookModel::GetDiagnostics(), samlar DiagnosticEntry poster — var och en med en GetCode(), en GetSeverity() (DiagnosticSeverity: Warning, Recoverable eller LossyRecoverable), en GetMessage(), en GetRepairApplied() flagga och en GetDataLossRisk() flagga — genererade medan en arbetsbok parsas eller serialiseras. Detta körs parallellt med Workbook::GetLoadDiagnostics(), vars fasadnivå LoadDiagnostics/LoadIssue typer delar samma DiagnosticSeverity uppräkning; kod som behöver den råa modellposten istället för LoadIssue omslaget når den via GetDiagnostics() på arbetsboksmodellen.
SharedStringRepository stöder xlsx shared-strings-tabellen: GetValues() returnerar den internade strängvektorn, TryGetValue(index, value) löser upp ett index tillbaka till text, och Intern(value) lägger till eller återanvänder en post — används internt när SaveOptions::SetUseSharedStrings(true) är satt. DateSerialConverter konverterar mellan en DateTime och det OLE-liknande serienumret som Excel lagrar i en cell, med en DateSystem så att 1900- och 1904-baserade arbetsböcker avkodas till samma kalenderdatum.
Snabbstart
Lägg till biblioteket i ett CMake-projekt som en undermapp och länka mot målet som det definierar:
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
target_link_libraries(MyApp PRIVATE Aspose.Cells.Foss.Cpp)
Exemplet nedan skriver en cell via fasaden, för att sedan nå in i den underliggande modellen för en diagnostikpåse och en CellAddress-parsning — samma operation som WorksheetModel::GetCells() använder internt för att nyckla sin cellkarta:
#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;
}
Stödda format
| Format | Filändelse | Läsa | Skriva |
|---|---|---|---|
| XLSX | .xlsx | ✓ | ✓ |
Modellagret som beskrivs här är den minnesbaserade representation som xlsx-läsaren och -skrivaren arbetar på; det är inte i sig bundet till något ytterligare filformat utöver Xlsx-import/-export som resten av biblioteket stödjer.
Öppen källkod & licensiering
Aspose.Cells FOSS för C++ är licensierad under MIT. Källkoden, inklusive Aspose::Cells_FOSS::Core-modellhuvudena som refereras i detta inlägg, finns på GitHub; kommersiell användning, modifiering och vidare distribution är tillåten.