Bevezetés

A Aspose.Cells FOSS C++-hoz két rétegre épül. A réteg, amelyet a legtöbb kód érint, a felület: Workbook, Worksheet, Cell és Style, amelyet a platform bejelentő és funkciócikkek tárgyalnak. Alatta egy második réteg helyezkedik el a Aspose::Cells_FOSS::Core névtérben, amely egyszerű adatrekordokból áll — WorkbookModel, WorksheetModel, CellRecord, StyleValue, és nagyjából négy tucat kapcsolódó *Model és *Value típus. Ezek a rekordok tartalmazzák a ténylegesen feldolgozott táblázatállapotot: cellaértékek, amelyekhez CellAddress kulcs tartozik, stílusattribútumok mint StyleValue, munkafüzet- és munkalapbeállítások, oldalbeállítás, szűrők és betöltési diagnosztika. A felület osztályok ebből a rétegből olvasnak és írásra használják, ahelyett, hogy maguk tárolnák az állapotot.

A két réteg közötti híd explicit és nyilvános. Workbook::GetModel() visszaad egy Core::WorkbookModel-t, Worksheet::GetModel() visszaad egy Core::WorksheetModel-t, és a Style::ToCore() / Style::FromCore() egy módosítható Style-ot konvertál egy Core::StyleValue-ra és vissza. DocumentProperties::GetModel() és ExtendedDocumentProperties::GetModel() ugyanezt teszik a dokumentum metaadatoknál. A felhasználó szűkebb esetekben közvetlenül ehhez a réteghez nyúl, mint a mindennapi cellaszerkesztő API: a DiagnosticBag ellenőrzése, amely a munkafüzet betöltése vagy mentése során került rögzítésre, egy stílus normalizálása a munkafüzet-szintű StyleRepository segítségével, vagy a plain-old-data cella- és sorrekordok közvetlen kezelése a Cell / Row burkoló objektumok helyett.

Mindez, ami itt le van írva, az ugyanabban az MIT-licencelt, függőségek nélküli forrásfában kerül szállításra, mint a Aspose.Cells FOSS C++-ra vonatkozó többi része, CMake-el felépítve, fejlécek és forráskód formájában, nem pedig előre lefordított binárisként. Ha még nem dolgoztál a felület API-val, először a Munkafüzet/Munkalap/Cella funkciókról szóló bejegyzéssel kezdj — ez a bejegyzés ezt a kiindulási pontot feltételezi, és arra fókuszál, ami alatta helyezkedik el.


Mi jár bele

A Munkafüzet és Munkalap modellfa

A Core::WorkbookModel a gyökérrekord. GetWorksheets() visszaad egy std::deque<WorksheetModel>-t, GetSettings() egy WorkbookSettingsModel-t, GetProperties() egy WorkbookPropertiesModel-t, GetDocumentProperties() egy DocumentPropertiesModel-t, GetDiagnostics() egy DiagnosticBag-t, GetStyles() egy StyleRepository-t, GetSharedStrings() egy SharedStringRepository-t, és GetDefaultStyle() / SetDefaultStyle() egy StyleValue-t. Emellett nyomon követi a GetActiveSheetIndex()-t és egy std::vector<DefinedNameModel>-t a GetDefinedNames()-ból. A Workbook::GetModel() ennek a rekordnak a belépési pontja.

Core::WorksheetModel, a Worksheet::GetModel() útján elérhető, tárolja a cellákat std::unordered_map<CellAddress, CellRecord> formájában a GetCells() segítségével, a sorokat std::unordered_map<int, RowModel> formájában a GetRows() segítségével, az oszloptartományokat std::vector<ColumnRangeModel> formájában a GetColumns() segítségével, és az egyesített tartományokat std::vector<MergeRegion> formájában a GetMergeRegions() segítségével. Emellett tartalmazza a GetHyperlinks(), GetValidations(), GetConditionalFormattings(), GetPageSetup(), GetView(), GetProtection(), GetAutoFilter(), GetTabColor() és GetVisibility() (egy SheetVisibility érték: Visible, Hidden vagy VeryHidden).

CellAddress a hash-elhető kulcstípus, amelyet az a cellatérkép használ. A1-stílusú szöveget alakítja át nulla-alapú sor/oszlop indexekké és vissza — ez a kevés osztály egyike ebben a csoportban, amelynek közvetlen tesztlefedettsége van a FOSS tárolóban:

#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 egy cella CellValue, CellValueKind, egy opcionális képletkarakterláncot, egy StyleValue, és egy GetIsExplicitlyStored() jelzőt tárol, amely megkülönbözteti a valóban írt cellát egy olyan cellától, amely csak azért létezik, mert egy sor vagy oszlop alapértelmezése érinti. RowModel opcionális magasságot, egy rejtett jelzőt és egy opcionális stílusindexet tartalmaz; ColumnRangeModel ugyanazt a hármat tartalmazza, plusz a minimális/maximális oszloptartományt, amelyre vonatkozik. MergeRegion egy egyszerű első-sor/első-oszlop/összes-sor/összes-oszlop téglalap.

Stílusadatok egyszerű értékekként

StyleValue a Core megfelelője a módosítható Style felületnek — Style::ToCore() egy Style-et alakít egyévé, és Style::FromCore() egy Style-ot épít egyből. Csoportosítja a GetFont() (FontValue), a GetPattern() (FillPatternKind), a GetForegroundColor() / GetBackgroundColor() (ColorValue), a GetBorders() (BordersValue), a GetAlignment() (AlignmentValue), a GetProtection() (ProtectionValue) és a GetNumberFormat() (NumberFormatValue) elemeket, valamint egy statikus StyleValue::Default() és egy Clone() elemet. FontValue tükrözi a Font mezőt mezőként: name, size, bold, italic, underline, strike-through, és egy ColorValue. ColorValue maga egy egyszerű ARGB n-es (GetA(), GetR(), GetG(), GetB(), Equals(), GetHashCode()) — a Color felület osztálytól eltérően nincs FromArgb()-stílusú gyár, ezért egy ColorValue általában meglévő stílusból származik, nem közvetlenül építve.

BordersValue öt BorderSideValue tagot tartalmaz — bal, jobb, felső, alsó és átlós — mindegyik egy BorderStyle felsorolt értéket párosít egy ColorValue-val. AlignmentValue modellezi a vízszintes és függőleges igazítást, a szöveg tördelését, a behúzási szintet, a szöveg forgatását, a szűkítéshez illesztést és az olvasási sorrendet. ProtectionValue és NumberFormatValue támasztják a cellavédelem jelzőket és a számformátum azonosító/egyedi karakterlánc párt, amelyet a Style bemutat.

StyleRepository, a WorkbookModel::GetStyles() útján elérhető, egy műveletet tesz elérhetővé: Normalize(style) -> StyleValue. A munkafüzet belsőleg használja betöltéskor és mentéskor, hogy az ekvivalens stílusokat internálja ahelyett, hogy azonos StyleValue rekordokat duplikálná — nem egy általános célú stílusgyorsítótár, amely index-alapú keresést biztosít a jelenlegi API felületen.

Dokumentum tulajdonságok és munkafüzet-szintű beállítások

DocumentPropertiesModel csoportok GetCore() (CoreDocumentPropertiesModel: title, subject, creator, keywords, description, last-modified-by, revision, category, content status, és created/modified timestamps) és GetExtended() (ExtendedDocumentPropertiesModel: application, app version, company, manager, doc security, hyperlink base, és a scale-crop / links-up-to-date / shared-doc flags). DocumentProperties::GetModel() és ExtendedDocumentProperties::GetModel() hidat képeznek a felület osztályok és ezek a rekordok között.

WorkbookPropertiesModel tükrözi WorkbookProperties — code name, show-objects, filter privacy, backup-file, és kapcsolódó jelzők — és beágyazza 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), és CalculationPropertiesModel (calculation mode, iteration settings, full precision, concurrent calculation). WorkbookSettingsModel egy DateSystem értéket tartalmaz (Windows1900 vagy Mac1904) és egy megjelenítési kultúrát — a modell-szintű megfelelője a WorkbookSettings::GetDate1904() / GetCulture(). A legtöbb *Model típus ebben a csoportban CopyFrom(source) és HasStoredState() mezőket tesz közzé, amelyeket a serializer használ, hogy megkülönböztesse a kifejezetten beállított értéket egy be nem állított alapértéktől, mielőtt a XML íródna.

Munkalap funkciómodellek

WorksheetProtectionModel tükrözi WorksheetProtection mezőt mezőként, és hozzáadja a tárolt jelszó mezőket — GetPasswordHash(), GetAlgorithmName(), GetHashValue(), GetSaltValue(), GetSpinCount() — amelyeket a WorksheetProtection felület nem jelenít meg közvetlenül. WorksheetViewModel tartalmaz rácsvonal, fejléc és nulla láthatóság, jobbról balra elrendezés, és nagyítási méretarányt. PageSetupModel beágyazza PageMarginsModel (bal/jobb/fent/lent/fejléc/lábléc margók double típusúként), PrintOptionsModel (rácsvonalak, fejlécek, vízszintes és függőleges középre igazítás), és HeaderFooterModel (bal/közép/jobbal fejléc és lábléc szöveg), továbbá papírméret, tájolás, méretarány, szélesség/magasság illesztés, nyomtatási terület, nyomtatási cím sorok/oszlopok, és oldaltörés vektorok.

AutoFilterModel egy tartomány karakterláncot, egy std::vector<FilterColumnModel> és egy AutoFilterSortStateModel tartalmaz. FilterColumnModel ezzel szemben beágyazza AutoFilterColorFilterModel, AutoFilterDynamicFilterModel és AutoFilterTop10Model, valamint egy egyszerű listát a szűrőérték karakterláncokról és egy std::vector<AutoFilterCustomFilterModel>. ConditionalFormattingModel egy std::vector<CellArea>-t párosít egy std::vector<FormatConditionModel>-vel — minden feltétel tartalmazza típusát, operátorát, képleteit, color-scale/data-bar/icon-set mezőket, és egy StyleValue-t a kapott formátumhoz. ValidationModel és HyperlinkModel tükrözik a Validation és Hyperlink felületeket egyszerű rekordokként, és DefinedNameModel tükrözi a DefinedName-t. SheetVisibility a modellréteg enumja a Worksheet::GetVisibilityType() mögött.

Néhány, az ezeket a rekordokat támogató felület funkció — különösen AutoFilter és ConditionalFormattingCollection — a termékdokumentációban meg van jelölve, mint még aktív fejlesztés alatt álló ebben a kiadásban. Tekintse a fenti formákat a modell és a serializer által körülvett szerkezeti célnak, nem pedig garanciának arra, hogy minden mező ma vissza tud menni egy mentett munkafüzeten keresztül.

Diagnosztika és megosztott állapot

DiagnosticBag, amelyet a WorkbookModel::GetDiagnostics() útján érünk el, DiagnosticEntry rekordokat gyűjt — mindegyik egy GetCode(), egy GetSeverity() (DiagnosticSeverity: Warning, Recoverable, vagy LossyRecoverable), egy GetMessage(), egy GetRepairApplied() jelzőt és egy GetDataLossRisk() jelzőt tartalmaz — amelyek a munkafüzet elemzése vagy sorosítása közben jönnek létre. Ez együtt fut a Workbook::GetLoadDiagnostics()-vel, amelynek felület-szintű LoadDiagnostics / LoadIssue típusai ugyanazt a DiagnosticSeverity enumot osztják; a kód, amelynek a nyers modell rekordra van szüksége a LoadIssue burkoló helyett, azt a munkafüzet modellben a GetDiagnostics() útján érheti el.

SharedStringRepository támogatja az xlsx shared-strings táblát: GetValues() visszaadja a belső string vektort, TryGetValue(index, value) felold egy indexet vissza szöveggé, és Intern(value) hozzáad vagy újrahasznál egy bejegyzést — belsőleg használva, amikor SaveOptions::SetUseSharedStrings(true) be van állítva. DateSerialConverter átalakít egy DateTime és az OLE-stílusú sorozatszám között, amelyet az Excel egy cellában tárol, egy DateSystem figyelembe véve, hogy a 1900- és 1904-alapú munkafüzetek ugyanarra a naptári dátumra legyenek dekódolva.


Gyors kezdés

Adja hozzá a könyvtárat egy CMake projekthez almappaként, és linkelje a definiált célt:

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

Az alábbi példa a facade-on keresztül ír egy cellát, majd a mögöttes modellben keres egy diagnosztikai csomagot és egy CellAddress elemzést — ugyanazt a műveletet használja a WorksheetModel::GetCells() belsőleg a cellatérkép kulcsként:

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

Támogatott formátumok

FormátumKiterjesztésOlvasásÍrás
XLSX.xlsx

Az itt leírt modellréteg a memóriában lévő reprezentáció, amelyen az xlsx olvasó és író működik; önmagában nem kapcsolódik semmilyen további fájlformátumhoz, a Xlsx import/exporton kívül, amelyet a könyvtár többi része támogat.


Nyílt forráskód és licencelés

Aspose.Cells FOSS C++-hez MIT licenc alatt áll. A forráskód, beleértve a bejegyzésben hivatkozott Aspose::Cells_FOSS::Core modellfejléc fájlokat, megtalálható a GitHub oldalán; a kereskedelmi felhasználás, módosítás és terjesztés megengedett.


Első lépések

Kapcsolódó erőforrások