Praca z komórkami i modelem danych
Praca z komórkami i modelem danych
Klasa Cell jest głównym interfejsem do odczytu i zapisu pojedynczych wartości komórek arkusza kalkulacyjnego, formuł i stylów. Dostęp do komórki można uzyskać poprzez kolekcję Cells arkusza przy użyciu ciągu adresowego.
Zapisywanie wartości do komórek
Użyj Cell::PutValue do zapisu tekstu, liczb, wartości logicznych lub dat do komórki:
#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;
}Ustawianie formuł
Użyj Cell::SetFormula(formula) do zapisania formuły kompatybilnej z Excelem. Formuły są obliczane przez Excel lub kompatybilne czytniki po otwarciu pliku.
sheet.GetCells()["B4"].SetFormula("=SUM(B2:B3)");
sheet.GetCells()["C4"].SetFormula("=AVERAGE(B2:B3)");Odczytywanie wartości komórek
Odczytaj bieżącą wartość komórki przy użyciu Cell::GetValue(), co zwraca obiekt CellValue. Konwertuj na konkretny typ za pomocą odpowiedniego akcesora:
CellValue val = sheet.GetCells()["B2"].GetValue();
double price = val.AsDouble();
std::string text = sheet.GetCells()["A2"].GetStringValue();Klasa CellValue udostępnia typowane akcesory:
| Metoda | Typ zwracany |
|---|---|
AsDouble() | double |
AsInteger() | int |
AsBool() | bool |
AsString() | std::string |
AsDateTime() | DateTime |
Dostęp do komórek według wiersza i kolumny
Oprócz ciągów adresowych, uzyskaj dostęp do komórek za pomocą indeksów wiersza i kolumny zaczynających się od zera:
// Address string
Cell& cellA1 = sheet.GetCells()["A1"];
// Row/column index (0-based)
int row = cellA1.GetRow();
int col = cellA1.GetColumn();Scalanie komórek
Użyj Cells::Merge, aby scalić prostokątny zakres komórek w jedną:
CellArea area = CellArea::CreateCellArea("A1", "C1");
sheet.GetCells().Merge(area.StartRow, area.StartColumn,
area.EndRow - area.StartRow + 1,
area.EndColumn - area.StartColumn + 1);Uzyskiwanie tekstu wyświetlanego
Aby pobrać wartość komórki jako sformatowany tekst wyświetlany (z zastosowaniem formatów liczbowych), użyj Cell::GetDisplayStringValue():
std::string display = sheet.GetCells()["B2"].GetDisplayStringValue();Wskazówki i najlepsze praktyki
- Preferuj
PutValuezamiastSetValueprzy bezpośrednich przypisaniach literałów —PutValuema przeciążenia dla wszystkich typów prymitywnych. - Użyj
GetStringValue()do pobierania tekstu bez konwersji typu; użyjGetValue().AsDouble(), gdy potrzebna jest precyzja liczby. - Zawsze wywołuj
SetFormuladla komórek z formułą, niePutValue("=SUM(...)")— ta druga przechowuje literał łańcucha, a nie formułę. - Użyj
CellArea::CreateCellArea(start, end)do tworzenia obiektów zakresu dla operacji scalania i formatowania.
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
GetValue() zwraca pustą | Komórka nie została zapisana | Zapisz wartość przy użyciu PutValue przed odczytem |
| Formuła nie została oceniona | Formuła zapisana jako ciąg znaków | Użyj SetFormula(expr) zamiast PutValue(expr) |
| Scalanie nie powiodło się | Nieprawidłowe wymiary zakresu | Upewnij się, że endRow >= startRow i endColumn >= startColumn |
| Nieprawidłowość typów przy odczycie | Wywoływanie niewłaściwej metody As*() | Dopasuj akcesor do oryginalnego typu PutValue |
API Reference Podsumowanie
| Klasa/Metoda | Opis |
|---|---|
Cell::PutValue(value) | Zapisz wartość literalną do komórki |
Cell::SetFormula(formula) | Ustaw ciąg formuły Excel |
Cell::GetValue() | Pobierz wartość komórki jako CellValue |
Cell::GetStringValue() | Pobierz wartość komórki jako ciąg znaków |
Cell::GetDisplayStringValue() | Pobierz sformatowany ciąg wyświetlania |
Cell::GetRow() | Pobierz indeks wiersza liczony od zera |
Cell::GetColumn() | Pobierz indeks kolumny zaczynający się od zera |
Cell::GetStyle() | Pobierz bieżący styl komórki |
Cell::SetStyle(style) | Zastosuj zmodyfikowany styl do komórki |
CellValue::AsDouble() | Konwertuj wartość komórki na typ double |
CellValue::AsString() | Konwertuj wartość komórki na typ string |
Cells::Merge(row, col, rows, cols) | Scali prostokątny zakres |