Arbeiten mit Zellen und dem Datenmodell
Arbeiten mit Zellen und dem Datenmodell
Die Klasse Cell ist die primäre Schnittstelle zum Lesen und Schreiben einzelner Tabellenblatt-Zellwerte, Formeln und Stile. Greifen Sie über die Cells-Sammlung des Arbeitsblatts mit einem Adressstring auf eine Zelle zu.
Werte in Zellen schreiben
Verwenden Sie Cell::PutValue, um Text, Zahlen, Boolesche Werte oder Datumsangaben in eine Zelle zu schreiben:
#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;
}Formeln festlegen
Verwenden Sie Cell::SetFormula(formula), um eine Excel-kompatible Formel zu schreiben. Formeln werden von Excel oder kompatiblen Lesern ausgewertet, wenn die Datei geöffnet wird.
sheet.GetCells()["B4"].SetFormula("=SUM(B2:B3)");
sheet.GetCells()["C4"].SetFormula("=AVERAGE(B2:B3)");Zellwerte lesen
Lese den aktuellen Wert einer Zelle mit Cell::GetValue(), das ein CellValue-Objekt zurückgibt. Konvertiere zu einem bestimmten Typ mit dem entsprechenden Accessor:
CellValue val = sheet.GetCells()["B2"].GetValue();
double price = val.AsDouble();
std::string text = sheet.GetCells()["A2"].GetStringValue();Die CellValue-Klasse stellt typisierte Accessoren bereit:
| Methode | Rückgabetyp |
|---|---|
AsDouble() | double |
AsInteger() | int |
AsBool() | bool |
AsString() | std::string |
AsDateTime() | DateTime |
Zugriff auf Zellen nach Zeile und Spalte
Neben Adress-Strings können Sie Zellen über nullbasierte Zeilen- und Spaltenindizes ansprechen:
// Address string
Cell& cellA1 = sheet.GetCells()["A1"];
// Row/column index (0-based)
int row = cellA1.GetRow();
int col = cellA1.GetColumn();Zellen zusammenführen
Verwende Cells::Merge, um einen rechteckigen Zellbereich zu einer einzigen Zelle zusammenzuführen:
CellArea area = CellArea::CreateCellArea("A1", "C1");
sheet.GetCells().Merge(area.StartRow, area.StartColumn,
area.EndRow - area.StartRow + 1,
area.EndColumn - area.StartColumn + 1);Abrufen des Anzeigetextes
Um den Zellenwert als formatierten Anzeigetext (unter Anwendung von Zahlenformaten) zu erhalten, verwende Cell::GetDisplayStringValue():
std::string display = sheet.GetCells()["B2"].GetDisplayStringValue();Tipps und bewährte Vorgehensweisen
- Bevorzuge
PutValuegegenüberSetValuefür direkte Literalzuweisungen —PutValuehat Überladungen für alle primitiven Typen. - Verwende
GetStringValue(), um Text ohne Typkonvertierung abzurufen; verwendeGetValue().AsDouble(), wenn du numerische Präzision benötigst. - Rufe immer
SetFormulafür Formelfeldzellen auf, nichtPutValue("=SUM(...)")— Letzteres speichert ein String-Literal, nicht eine Formel. - Verwende
CellArea::CreateCellArea(start, end), um Bereichsobjekte für Zusammenführungs- und Formatierungsoperationen zu erstellen.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
GetValue() gibt leer zurück | Zelle wurde nicht geschrieben | Schreibe einen Wert mit PutValue bevor du liest |
| Formel nicht ausgewertet | Formel als Zeichenkette gespeichert | Verwenden Sie SetFormula(expr) anstelle von PutValue(expr) |
| Zusammenführen schlägt fehl | Ungültige Bereichsdimensionen | Stellen Sie sicher, dass endRow >= startRow und endColumn >= startColumn |
| Typenkonflikt beim Lesen | Falsche As*()-Methode aufrufen | Ordnen Sie den Accessor dem ursprünglichen PutValue-Typ zu |
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
Cell::PutValue(value) | Schreiben Sie einen Literalwert in die Zelle |
Cell::SetFormula(formula) | Setzt einen Excel-Formel-String |
Cell::GetValue() | Rufen Sie den Zellenwert als CellValue ab |
Cell::GetStringValue() | Rufen Sie den Zellenwert als Zeichenkette ab |
Cell::GetDisplayStringValue() | Rufen Sie die formatierte Anzeigekette ab |
Cell::GetRow() | Ruft den nullbasierten Zeilenindex ab |
Cell::GetColumn() | Gibt den nullbasierten Spaltenindex zurück |
Cell::GetStyle() | Ruft den aktuellen Zellenstil ab |
Cell::SetStyle(style) | Wenden Sie einen modifizierten Stil auf die Zelle an |
CellValue::AsDouble() | Zellenwert in double konvertieren |
CellValue::AsString() | Zellenwert in String konvertieren |
Cells::Merge(row, col, rows, cols) | Einen rechteckigen Bereich zusammenführen |