Introduzione

La gestione dei fogli di calcolo è la parte di Aspose.Cells FOSS per C++ che la maggior parte dei programmi tocca per prima: il Workbook che possiede il file, gli oggetti Worksheet al suo interno e la collezione Cells che contiene valori, formule e formattazione. Questo post approfondisce quella superficie più di una introduzione generale — come vengono creati e navigati i workbook e i worksheet, come vengono letti e scritti i valori e le formule delle celle, come Style, Font, Color e Borders si combinano per formattare l’output, e come PageSetup, Hyperlink, DefinedName e Validation aggiungono struttura attorno alla griglia grezza delle celle.

Tutte le classi trattate qui fanno parte del API nativo C++ dichiarato nei header aspose/cells_foss/. Non c’è interoperabilità COM e nessuna dipendenza dall’installazione di Microsoft Excel — la libreria legge e scrive direttamente il formato di pacchetto .xlsx, il che spiega anche perché l’attuale rilascio supporta solo .xlsx, sia in lettura che in scrittura.

Gli esempi seguenti si basano l’uno sull’altro: viene creato un workbook, vengono popolati worksheet e celle, si applica lo styling e il file viene salvato e ricaricato per confermare il round trip. Tutto il codice è adattato dalle suite di test di compatibilità, golden e unità della libreria, quindi riflette operazioni eseguite su output .xlsx reali.


Caratteristiche principali

Gestione di Workbook e Worksheet

Un Workbook inizia con un worksheet nel suo WorksheetCollection. I worksheet vengono aggiunti con Add(), ricercati per indice o per nome, e rinominati con SetName(). WorksheetCollection tiene anche traccia di quale foglio è attivo:

#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

Il salvataggio e il ricaricamento avvengono attraverso lo stesso tipo Workbook. Workbook::Save() accetta un percorso file, e un Workbook può essere costruito direttamente da un percorso o da un buffer di byte in memoria, che effettua il round-trip dei valori delle celle e delle formule:

workbook.Save("report.xlsx");

Workbook loaded("report.xlsx");
Worksheet& reloadedSheet = loaded.GetWorksheets()["Data"];

Valori delle Celle e Formule

Cells, raggiunto tramite Worksheet::GetCells(), indicizza le celle con riferimento in stile A1. Cell::PutValue() accetta stringhe, interi, double e booleani, SetFormula() memorizza una stringa di formula Excel, e GetValue() restituisce un CellValue con accessor tipizzati (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() restituisce il CellValueType memorizzato (Blank, String, Number, Boolean, DateTime o Formula), e GetDisplayStringValue() restituisce il valore formattato come apparirebbe in Excel, rispettando qualsiasi formato numerico applicato tramite Style.

Stilizzare con Stile, Font, Colore e Bordi

Cell::GetStyle() restituisce un oggetto Style che può essere modificato e riapplicato con SetStyle(). Style espone un Font, un set Borders, modello di riempimento e colore, allineamento e formato numerico:

#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 è un tipo valore: leggerlo nuovamente con GetStyle() riflette qualsiasi cosa sia stata impostata per ultima con SetStyle(), il che rende semplice creare un unico stile e applicarlo a tutta una riga di intestazione o a un intervallo di celle dati.

Impostazione Pagina e Configurazione Stampa

Worksheet::GetPageSetup() restituisce un PageSetup oggetto che copre le dimensioni della carta, l’orientamento, i margini, la scala, i titoli di stampa e le interruzioni di pagina:

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

I margini sono disponibili sia in unità grezze (GetLeftMargin()) che in pollici (GetLeftMarginInch()), e GetHorizontalPageBreaks() / GetVerticalPageBreaks() restituiscono le posizioni delle interruzioni di pagina attualmente impostate sul foglio.

Collegamenti ipertestuali, Nomi definiti e Convalida dati

Worksheet::GetHyperlinks() restituisce un HyperlinkCollection. Add() accetta una cella o un intervallo di destinazione più un indirizzo e restituisce l’indice del nuovo collegamento ipertestuale, che viene utilizzato per recuperare l’oggetto Hyperlink per ulteriori modifiche:

#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() gestisce gli intervalli denominati allo stesso modo — Add() restituisce un indice nel 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() segue lo stesso modello di raccolta per le regole di convalida dati, limitate a un 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");

Proprietà del documento e impostazioni della cartella di lavoro

Workbook::GetDocumentProperties() espone i campi di metadati OOXML core ed estesi (titolo, autore, azienda, responsabile e simili), e Workbook::GetSettings() controlla il comportamento a livello di cartella di lavoro, come il sistema di data:

#include "aspose/cells_foss/DocumentProperties.h"

workbook.GetDocumentProperties().SetCompany("Example Corp");
workbook.GetDocumentProperties().SetManager("Finance Team");

workbook.GetSettings().SetDate1904(false);

Questi valori subiscono un round-trip attraverso il salvataggio e il ricaricamento allo stesso modo del contenuto delle celle, il che è utile per i report che necessitano di metadati coerenti nei file generati.


Avvio rapido

Aspose.Cells FOSS per C++ è costruito dal sorgente con CMake. Clona il repository e aggiungilo come sottodirectory oppure importalo con 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)

Un esempio minimale di gestione di fogli di calcolo — crea, formatta, salva e ricarica:

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

Formati supportati

FormatoEstensioneLeggiScrivi
Xlsx.xlsx✓✓

LoadFormat e SaveFormat espongono entrambi un unico valore Xlsx in questa versione; i costruttori Workbook(path) e Workbook(bytes) caricano l’input .xlsx, e Workbook::Save() scrive l’output .xlsx su un percorso, uno stream o un buffer in memoria.


Open Source e Licenze

Aspose.Cells FOSS per C++ è rilasciato sotto licenza MIT. Il codice sorgente è disponibile su GitHub, e la libreria può essere usata, modificata e ridistribuita in progetti commerciali e open-source senza costi di esecuzione.


Introduzione

Risorse correlate