セルとデータモデルの操作
セルとデータモデルの操作
Cell クラスは、個々のスプレッドシートセルの値、数式、スタイルを読み書きするための主要なインターフェースです。アドレス文字列を使用して、ワークシートの Cells コレクションからセルにアクセスします。
セルへの値の書き込み
Cell::PutValue を使用して、テキスト、数値、ブーリアン、または日付をセルに書き込みます:
#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;
}数式の設定
Cell::SetFormula(formula) を使用して、Excel 互換の数式を書き込みます。数式は、ファイルが開かれたときに Excel または互換性のあるリーダーによって評価されます。
sheet.GetCells()["B4"].SetFormula("=SUM(B2:B3)");
sheet.GetCells()["C4"].SetFormula("=AVERAGE(B2:B3)");セル値の読み取り
セルの現在の値を Cell::GetValue() で読み取り、CellValue オブジェクトが返されます。適切なアクセサを使用して特定の型に変換します:
CellValue val = sheet.GetCells()["B2"].GetValue();
double price = val.AsDouble();
std::string text = sheet.GetCells()["A2"].GetStringValue();CellValue クラスは型付きアクセサを提供します:
| メソッド | 戻り値の型 |
|---|---|
AsDouble() | double |
AsInteger() | int |
AsBool() | bool |
AsString() | std::string |
AsDateTime() | DateTime |
行と列でセルにアクセスする
アドレス文字列に加えて、ゼロベースの行と列インデックスでセルにアクセスできます:
// Address string
Cell& cellA1 = sheet.GetCells()["A1"];
// Row/column index (0-based)
int row = cellA1.GetRow();
int col = cellA1.GetColumn();セルの結合
矩形範囲のセルを 1 つに結合するには、Cells::Merge を使用します:
CellArea area = CellArea::CreateCellArea("A1", "C1");
sheet.GetCells().Merge(area.StartRow, area.StartColumn,
area.EndRow - area.StartRow + 1,
area.EndColumn - area.StartColumn + 1);表示テキストの取得
セルの値を書式設定された表示テキスト(数値書式を適用)として取得するには、Cell::GetDisplayStringValue() を使用します:
std::string display = sheet.GetCells()["B2"].GetDisplayStringValue();ヒントとベストプラクティス
- 直接リテラル代入には
PutValueをSetValueより優先してください —PutValueはすべてのプリミティブ型に対するオーバーロードを持っています。 - 型変換なしでテキストを取得するには
GetStringValue()を使用し、数値精度が必要な場合はGetValue().AsDouble()を使用してください。 - 数式セルには常に
SetFormulaを呼び出し、PutValue("=SUM(...)")は使用しないでください — 後者は文字列リテラルを格納し、数式ではありません。 - 結合および書式設定操作のために範囲オブジェクトを作成するには
CellArea::CreateCellArea(start, end)を使用してください。
一般的な問題
| 問題 | 原因 | 修正 |
|---|---|---|
GetValue() が空を返す | セルが書き込まれていません | 読む前に PutValue を使って値を書き込む |
| 式が評価されていません | 式が文字列として保存されました | SetFormula(expr) を PutValue(expr) の代わりに使用してください |
| マージに失敗しました | 無効な範囲の次元 | endRow >= startRow と endColumn >= startColumn を確認してください |
| 読み取り時の型不一致 | 誤った As*() メソッドを呼び出しています | アクセサを元の PutValue タイプに合わせる |
API Reference の概要
| クラス/メソッド | 説明 |
|---|---|
Cell::PutValue(value) | セルにリテラル値を書き込む |
Cell::SetFormula(formula) | Excel の数式文字列を設定する |
Cell::GetValue() | セルの値を CellValue として取得する |
Cell::GetStringValue() | セルの値を文字列として取得する |
Cell::GetDisplayStringValue() | フォーマットされた表示文字列を取得する |
Cell::GetRow() | ゼロベースの行インデックスを取得 |
Cell::GetColumn() | ゼロベースの列インデックスを取得します |
Cell::GetStyle() | 現在のセルスタイルを取得する |
Cell::SetStyle(style) | セルに変更されたスタイルを適用する |
CellValue::AsDouble() | セルの値を double に変換する |
CellValue::AsString() | セルの値を文字列に変換する |
Cells::Merge(row, col, rows, cols) | 矩形範囲を結合する |