Práce s buňkami a datovým modelem
Práce s buňkami a datovým modelem
Třída Cell je hlavním rozhraním pro čtení a zápis jednotlivých hodnot buněk, vzorců a stylů v tabulce. Přístup k buňce lze získat přes kolekci Cells listu pomocí řetězce adresy.
Zápis hodnot do buněk
Použijte Cell::PutValue k zápisu textu, čísel, logických hodnot nebo datumů do buňky:
#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;
}Nastavení vzorců
Použijte Cell::SetFormula(formula) k zápisu Excel-kompatibilního vzorce. Vzorce jsou vyhodnoceny v Excelu nebo kompatibilními čtečkami při otevření souboru.
sheet.GetCells()["B4"].SetFormula("=SUM(B2:B3)");
sheet.GetCells()["C4"].SetFormula("=AVERAGE(B2:B3)");Čtení hodnot buněk
Přečtěte aktuální hodnotu buňky pomocí Cell::GetValue(), která vrací objekt CellValue. Převést na konkrétní typ pomocí příslušného accessoru:
CellValue val = sheet.GetCells()["B2"].GetValue();
double price = val.AsDouble();
std::string text = sheet.GetCells()["A2"].GetStringValue();Třída CellValue poskytuje typované accessory:
| Metoda | Typ vrácení |
|---|---|
AsDouble() | double |
AsInteger() | int |
AsBool() | bool |
AsString() | std::string |
AsDateTime() | DateTime |
Přístup k buňkám podle řádku a sloupce
Kromě řetězcových adres můžete přistupovat k buňkám pomocí nulových indexů řádku a sloupce:
// Address string
Cell& cellA1 = sheet.GetCells()["A1"];
// Row/column index (0-based)
int row = cellA1.GetRow();
int col = cellA1.GetColumn();Sloučení buněk
Použijte Cells::Merge ke sloučení obdélníkového rozsahu buněk do jedné:
CellArea area = CellArea::CreateCellArea("A1", "C1");
sheet.GetCells().Merge(area.StartRow, area.StartColumn,
area.EndRow - area.StartRow + 1,
area.EndColumn - area.StartColumn + 1);Získání zobrazovaného textu
Chcete-li získat hodnotu buňky jako formátovaný zobrazovací text (aplikací číselných formátů), použijte Cell::GetDisplayStringValue():
std::string display = sheet.GetCells()["B2"].GetDisplayStringValue();Tipy a osvědčené postupy
- Upřednostněte
PutValuepředSetValuepro přímé přiřazení literálů —PutValuemá přetížení pro všechny primitivní typy. - Použijte
GetStringValue()k získání textu bez konverze typu; použijteGetValue().AsDouble(), když potřebujete číselnou přesnost. - Vždy volejte
SetFormulapro buňky s formulí, nePutValue("=SUM(...)")— druhý ukládá řetězcový literál, ne formuli. - Použijte
CellArea::CreateCellArea(start, end)k vytvoření objektů rozsahu pro operace sloučení a formátování.
Běžné problémy
| Problém | Příčina | Oprava |
|---|---|---|
GetValue() vrací prázdný | Buňka nebyla zapsána | Zapište hodnotu pomocí PutValue před čtením |
| Vzorec nebyl vyhodnocen | Vzorec uložen jako řetězec | Použijte SetFormula(expr) místo PutValue(expr) |
| Sloučení selže | Neplatné rozměry rozsahu | Zajistěte endRow >= startRow a endColumn >= startColumn |
| Neshoda typů při čtení | Volání nesprávné metody As*() | Přiřaďte přístupový prvek k původnímu typu PutValue |
API Reference souhrn
| Třída/Metoda | Popis: |
|---|---|
Cell::PutValue(value) | Zapište literální hodnotu do buňky |
Cell::SetFormula(formula) | Nastaví řetězec Excelové formule |
Cell::GetValue() | Získejte hodnotu buňky jako CellValue |
Cell::GetStringValue() | Získejte hodnotu buňky jako řetězec |
Cell::GetDisplayStringValue() | Získejte formátovaný řetězec pro zobrazení |
Cell::GetRow() | Získá index řádku založený na nule |
Cell::GetColumn() | Získá index sloupce počítaný od nuly |
Cell::GetStyle() | Získá aktuální styl buňky |
Cell::SetStyle(style) | Použijte upravený styl na buňku |
CellValue::AsDouble() | Převést hodnotu buňky na double |
CellValue::AsString() | Převést hodnotu buňky na string |
Cells::Merge(row, col, rows, cols) | Sloučit obdélníkový rozsah |