Lavorare con le celle e il modello di dati
Lavorare con le celle e il modello di dati
La classe Cell è l’interfaccia principale per leggere e scrivere i valori, le formule e gli stili delle singole celle del foglio di calcolo. Accedi a una cella tramite la collezione Cells del foglio di lavoro usando una stringa di indirizzo.
Scrivere valori nelle celle
Usa Cell::PutValue per scrivere testo, numeri, booleani o date in una cella:
#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.GetCells()["A1"].PutValue("Product");
sheet.GetCells()["B1"].PutValue("Price");
sheet.GetCells()["A2"].PutValue("Widget");
sheet.GetCells()["B2"].PutValue(9.99);
sheet.GetCells()["C2"].PutValue(true);
workbook.Save("data.xlsx");
return 0;
}Impostare le formule
Usa Cell::SetFormula(formula) per scrivere una formula compatibile con Excel. Le formule vengono valutate da Excel o da lettori compatibili quando il file viene aperto.
sheet.GetCells()["B4"].SetFormula("=SUM(B2:B3)");
sheet.GetCells()["C4"].SetFormula("=AVERAGE(B2:B3)");Leggere i valori delle celle
Leggi il valore corrente di una cella con Cell::GetValue(), che restituisce un oggetto CellValue. Converti a un tipo specifico usando l’accessore appropriato:
CellValue val = sheet.GetCells()["B2"].GetValue();
double price = val.AsDouble();
std::string text = sheet.GetCells()["A2"].GetStringValue();La classe CellValue fornisce accessor tipizzati:
| Metodo | Tipo di ritorno |
|---|---|
AsDouble() | double |
AsInteger() | int |
AsBool() | bool |
AsString() | std::string |
AsDateTime() | DateTime |
Accesso alle celle per riga e colonna
Oltre alle stringhe di indirizzo, accedi alle celle tramite indici di riga e colonna basati su zero:
// Address string
Cell& cellA1 = sheet.GetCells()["A1"];
// Row/column index (0-based)
int row = cellA1.GetRow();
int col = cellA1.GetColumn();Unione delle celle
Usa Cells::Merge per unire un intervallo rettangolare di celle in una sola:
CellArea area = CellArea::CreateCellArea("A1", "C1");
sheet.GetCells().Merge(area.StartRow, area.StartColumn,
area.EndRow - area.StartRow + 1,
area.EndColumn - area.StartColumn + 1);Ottenere il testo visualizzato
Per recuperare il valore della cella come testo visualizzato formattato (applicando i formati numerici), usa Cell::GetDisplayStringValue():
std::string display = sheet.GetCells()["B2"].GetDisplayStringValue();Suggerimenti e migliori pratiche
- Preferisci
PutValuerispetto aSetValueper assegnazioni letterali dirette —PutValueha overload per tutti i tipi primitivi. - Usa
GetStringValue()per recuperare il testo senza conversione di tipo; usaGetValue().AsDouble()quando hai bisogno di precisione numerica. - Chiama sempre
SetFormulaper le celle con formula, nonPutValue("=SUM(...)")— quest’ultimo memorizza una stringa letterale, non una formula. - Usa
CellArea::CreateCellArea(start, end)per creare oggetti intervallo per operazioni di unione e formattazione.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
GetValue() restituisce vuoto | La cella non è stata scritta | Scrivi un valore con PutValue prima di leggere |
| Formula non valutata | Formula salvata come stringa | Usa SetFormula(expr) invece di PutValue(expr) |
| Unione fallita | Dimensioni dell’intervallo non valide | Assicurati endRow >= startRow e endColumn >= startColumn |
| Tipo non corrispondente in lettura | Chiamata al metodo As*() errato | Abbina l’accessor al tipo originale PutValue |
Riepilogo API Reference
| Classe/Metodo | Descrizione |
|---|---|
Cell::PutValue(value) | Scrivi un valore letterale nella cella |
Cell::SetFormula(formula) | Imposta una stringa di formula Excel |
Cell::GetValue() | Recupera il valore della cella come un CellValue |
Cell::GetStringValue() | Recupera il valore della cella come stringa |
Cell::GetDisplayStringValue() | Recupera la stringa di visualizzazione formattata |
Cell::GetRow() | Ottieni l’indice di riga a base zero |
Cell::GetColumn() | Ottieni l’indice di colonna basato su zero |
Cell::GetStyle() | Ottieni lo stile della cella corrente |
Cell::SetStyle(style) | Applica uno stile modificato alla cella |
CellValue::AsDouble() | Converti il valore della cella in double |
CellValue::AsString() | Converti il valore della cella in string |
Cells::Merge(row, col, rows, cols) | Unisci un intervallo rettangolare |