Einleitung
Tabellenkalkulationsverwaltung ist der Teil von Aspose.Cells FOSS für C++, den die meisten Programme zuerst berühren: das Workbook, das die Datei besitzt, die Worksheet-Objekte darin und die Cells-Sammlung, die Werte, Formeln und Formatierungen enthält. Dieser Beitrag führt tiefer als eine allgemeine Einführung in diese Oberfläche ein – wie Arbeitsmappen und Arbeitsblätter erstellt und navigiert werden, wie Zellenwerte und Formeln gelesen und geschrieben werden, wie Style, Font, Color und Borders kombiniert werden, um die Ausgabe zu formatieren, und wie PageSetup, Hyperlink, DefinedName und Validation Struktur um das rohe Zellenraster hinzufügen.
Jede hier behandelte Klasse ist Teil der nativen C++ API, die in aspose/cells_foss/-Headern deklariert ist. Es gibt keine COM-Interop und keine Abhängigkeit davon, dass Microsoft Excel installiert ist — die Bibliothek liest und schreibt das .xlsx-Paketformat direkt, was auch der Grund dafür ist, dass die aktuelle Version nur .xlsx unterstützt, sowohl beim Laden als auch beim Speichern.
Die nachfolgenden Beispiele bauen aufeinander auf: Es wird eine Arbeitsmappe erstellt, Arbeitsblätter und Zellen werden befüllt, Stil wird angewendet und die Datei wird gespeichert und erneut geladen, um den Durchlauf zu bestätigen. Der gesamte Code ist aus den eigenen Kompatibilitäts-, Gold- und Unit-Test-Suiten der Bibliothek adaptiert, sodass er Vorgänge widerspiegelt, die an echter .xlsx-Ausgabe getestet werden.
Hauptmerkmale
Verwaltung von Arbeitsmappen und Arbeitsblättern
Ein Workbook beginnt mit einem Arbeitsblatt in seinem WorksheetCollection. Arbeitsblätter werden mit Add() hinzugefügt, nach Index oder Name gesucht und mit SetName() umbenannt. WorksheetCollection verfolgt zudem, welches Blatt aktiv ist:
#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
Speichern und Laden erfolgt über denselben Workbook-Typ. Workbook::Save() akzeptiert einen Dateipfad, und ein Workbook kann direkt aus einem Pfad oder aus einem im Speicher befindlichen Byte-Puffer erstellt werden, wobei Zellwerte und Formeln unverändert durchgereicht werden:
workbook.Save("report.xlsx");
Workbook loaded("report.xlsx");
Worksheet& reloadedSheet = loaded.GetWorksheets()["Data"];
Zellwerte und Formeln
Cells, über Worksheet::GetCells() erreicht, indiziert Zellen nach A1-Referenzstil. Cell::PutValue() akzeptiert Zeichenketten, Ganzzahlen, Fließkommazahlen und Boolesche Werte, SetFormula() speichert einen Excel-Formel-String, und GetValue() liefert ein CellValue mit typisierten Zugriffen (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() gibt das gespeicherte CellValueType (Blank, String, Number, Boolean, DateTime oder Formula) zurück, und GetDisplayStringValue() liefert den Wert formatiert, wie er in Excel erscheinen würde, wobei das über Style angewendete Zahlenformat berücksichtigt wird.
Styling mit Style, Font, Color und Borders
Cell::GetStyle() liefert ein Style-Objekt, das modifiziert und mit SetStyle() erneut angewendet werden kann. Style stellt ein Font, ein Borders-Set, Füllmuster und Farbe, Ausrichtung und Zahlenformat bereit:
#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 ist ein Werttyp: Das Zurücklesen mit GetStyle() spiegelt alles wider, was zuletzt mit SetStyle() gesetzt wurde, was es einfach macht, einen Stil zu erstellen und ihn über eine Kopfzeilenzeile oder einen Bereich von Datenzellen anzuwenden.
Seitenlayout und Druckkonfiguration
Worksheet::GetPageSetup() gibt ein PageSetup Objekt zurück, das Papiergröße, Ausrichtung, Ränder, Skalierung, Drucktitel und Seitenumbrüche abdeckt:
#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);
Ränder sind sowohl in rohen Einheiten (GetLeftMargin()) als auch in Zoll (GetLeftMarginInch()) verfügbar, und GetHorizontalPageBreaks() / GetVerticalPageBreaks() geben die aktuell im Blatt festgelegten Seitenumbruchpositionen zurück.
Hyperlinks, definierte Namen und Datenvalidierung
Worksheet::GetHyperlinks() gibt ein HyperlinkCollection zurück. Add() nimmt eine Zielzelle oder einen Bereich plus eine Adresse und gibt den Index des neuen Hyperlinks zurück, der verwendet wird, um das Hyperlink Objekt für weitere Änderungen abzurufen:
#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() verwaltet benannte Bereiche auf die gleiche Weise — Add() gibt einen Index in das DefinedNameCollection zurück:
#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() folgt dem gleichen Sammlungsmuster für Datenvalidierungsregeln, die auf ein CellArea beschränkt sind:
#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");
Dokumenteigenschaften und Arbeitsmappeneinstellungen
Workbook::GetDocumentProperties() stellt die Kern- und erweiterten OOXML-Metadatenfelder (Titel, Autor, Unternehmen, Manager und Ähnliches) bereit, und Workbook::GetSettings() steuert das Verhalten auf Arbeitsmappenebene, wie z. B. das Datumssystem:
#include "aspose/cells_foss/DocumentProperties.h"
workbook.GetDocumentProperties().SetCompany("Example Corp");
workbook.GetDocumentProperties().SetManager("Finance Team");
workbook.GetSettings().SetDate1904(false);
Diese Werte durchlaufen das Speichern und erneute Laden auf dieselbe Weise wie Zellinhalt, was für Berichte nützlich ist, die konsistente Metadaten über erzeugte Dateien hinweg benötigen.
Schnellstart
Aspose.Cells FOSS für C++ wird aus dem Quellcode mit CMake gebaut. Klonen Sie das Repository und fügen Sie es entweder als Unterverzeichnis hinzu oder holen Sie es mit FetchContent ein:
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)
Ein minimales spreadsheet-management Beispiel — erstellen, formatieren, speichern und neu laden:
#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;
}
Unterstützte Formate
| Format | Erweiterung | Lesen | Schreiben |
|---|---|---|---|
| Xlsx | .xlsx | ✓ | ✓ |
LoadFormat und SaveFormat stellen in dieser Version einen einzelnen Xlsx-Wert bereit; die Workbook(path)- und Workbook(bytes)-Konstruktoren laden .xlsx-Eingaben, und Workbook::Save() schreibt .xlsx-Ausgabe in einen Pfad, einen Stream oder einen In-Memory-Puffer.
Open Source & Lizenzierung
Aspose.Cells FOSS für C++ wird unter der MIT-Lizenz veröffentlicht. Der Quellcode ist verfügbar auf GitHub, und die Bibliothek kann in kommerziellen und Open-Source-Projekten ohne Laufzeitgebühren verwendet, modifiziert und weiterverbreitet werden.