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
| Formato | Estensione | Leggi | Scrivi |
|---|---|---|---|
| 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.