Introductie
Spreadsheetbeheer is het gedeelte van Aspose.Cells FOSS voor C++ dat de meeste programma’s als eerste aanraken: de Workbook die het bestand bezit, de Worksheet objecten erin, en de Cells collectie die waarden, formules en opmaak bevat. Deze post gaat dieper in op dit oppervlak dan een algemene introductie — hoe werkboeken en werkbladen worden aangemaakt en genavigeerd, hoe celwaarden en formules worden gelezen en geschreven, hoe Style, Font, Color en Borders combineren om output op te maken, en hoe PageSetup, Hyperlink, DefinedName en Validation structuur toevoegen rond het ruwe raster van cellen.
Elke hier behandelde klasse maakt deel uit van de native C++ API die gedeclareerd wordt onder aspose/cells_foss/ headers. Er is geen COM-interoperabiliteit en geen afhankelijkheid van een geïnstalleerde Microsoft Excel — de bibliotheek leest en schrijft het .xlsx pakkettenformaat direct, wat ook de reden is dat de huidige release alleen .xlsx ondersteunt, zowel bij laden als opslaan.
De onderstaande voorbeelden bouwen op elkaar voort: er wordt een werkboek aangemaakt, werkbladen en cellen worden gevuld, opmaak wordt toegepast, en het bestand wordt opgeslagen en opnieuw geladen om de round-trip te bevestigen. Alle code is aangepast van de eigen compatibiliteits-, golden- en eenheidstest-suites van de bibliotheek, zodat het de bewerkingen weerspiegelt die worden uitgevoerd op echte .xlsx output.
Belangrijkste kenmerken
Beheer van werkboeken en werkbladen
Een Workbook begint met één werkblad in zijn WorksheetCollection. Werkbladen worden toegevoegd met Add(), opgezocht op index of naam, en hernoemd met SetName(). WorksheetCollection houdt ook bij welk blad actief is:
#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
Opslaan en opnieuw laden verlopen via hetzelfde Workbook-type. Workbook::Save() accepteert een bestandspad, en een Workbook kan direct worden geconstrueerd vanuit een pad of vanuit een in-memory byte-buffer, die celwaarden en formules round-trippen:
workbook.Save("report.xlsx");
Workbook loaded("report.xlsx");
Worksheet& reloadedSheet = loaded.GetWorksheets()["Data"];
Celwaarden en Formules
Cells, bereikt via Worksheet::GetCells(), indexeert cellen met A1-stijl referentie. Cell::PutValue() accepteert strings, integers, doubles en booleans, SetFormula() slaat een Excel-formulestring op, en GetValue() retourneert een CellValue met getypeerde accessor-methoden (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() rapporteert de opgeslagen CellValueType (Blank, String, Number, Boolean, DateTime of Formula), en GetDisplayStringValue() retourneert de waarde geformatteerd zoals deze in Excel zou verschijnen, met inachtneming van het getalformaat dat via Style wordt toegepast.
Styling met Style, Font, Color en Borders
Cell::GetStyle() retourneert een Style-object dat kan worden gewijzigd en opnieuw kan worden toegepast met SetStyle(). Style exposeert een Font, een Borders-set, vulpatroon en kleur, uitlijning en getalformaat:
#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 is een waardetype: het teruglezen met GetStyle() weerspiegelt wat het laatst is ingesteld met SetStyle(), waardoor het eenvoudig is om één stijl te bouwen en toe te passen over een koprij of een reeks gegevenscellen.
Pagina-instelling en Afdrukconfiguratie
Worksheet::GetPageSetup() retourneert een PageSetup object dat papierformaat, oriëntatie, marges, schaal, afdruktitels en pagina-einden omvat:
#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);
Marges zijn beschikbaar in zowel ruwe eenheden (GetLeftMargin()) als inches (GetLeftMarginInch()), en GetHorizontalPageBreaks() / GetVerticalPageBreaks() retourneren de pagina-einde-posities die momenteel op het blad zijn ingesteld.
Hyperlinks, gedefinieerde namen en gegevensvalidatie
Worksheet::GetHyperlinks() retourneert een HyperlinkCollection. Add() neemt een doelcel of -bereik plus een adres en retourneert de index van de nieuwe hyperlink, die wordt gebruikt om het Hyperlink object op te halen voor verdere wijzigingen:
#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() beheert benoemde bereiken op dezelfde manier — Add() retourneert een index in de DefinedNameCollection:
#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() volgt hetzelfde verzamelpatroon voor gegevensvalidatieregels, beperkt tot een CellArea:
#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");
Documenteigenschappen en werkboekinstellingen
Workbook::GetDocumentProperties() maakt de kern- en uitgebreide OOXML-metadatavelden (titel, auteur, bedrijf, manager en soortgelijke) toegankelijk, en Workbook::GetSettings() regelt gedrag op werkboekniveau zoals het datum-systeem:
#include "aspose/cells_foss/DocumentProperties.h"
workbook.GetDocumentProperties().SetCompany("Example Corp");
workbook.GetDocumentProperties().SetManager("Finance Team");
workbook.GetSettings().SetDate1904(false);
Deze waarden gaan heen en weer via opslaan en opnieuw laden op dezelfde manier als celinhoud, wat handig is voor rapporten die consistente metadata over gegenereerde bestanden nodig hebben.
Snelle start
Aspose.Cells FOSS voor C++ wordt gebouwd vanuit de bron met CMake. Kloon de repository en voeg het toe als subdirectory of haal het binnen met FetchContent:
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)
Een minimaal spreadsheet-beheer voorbeeld — maken, opmaken, opslaan en opnieuw 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;
}
Ondersteunde formaten
| Formaat | Extensie | Lezen | Schrijven |
|---|---|---|---|
| Xlsx | .xlsx | ✓ | ✓ |
LoadFormat en SaveFormat bieden beide een enkele Xlsx waarde in deze release; de Workbook(path) en Workbook(bytes) constructors laden .xlsx invoer, en Workbook::Save() schrijft .xlsx uitvoer naar een pad, een stream of een buffer in het geheugen.
Open source & licensering
Aspose.Cells FOSS voor C++ wordt uitgebracht onder de MIT-licentie. Broncode is beschikbaar op GitHub, en de bibliotheek kan worden gebruikt, aangepast en herverdeeld in commerciële en open-source projecten zonder runtime kosten.