数式の操作

概要

Aspose.Cells FOSS は数式を Excel 互換の文字列として保存します。ライブラリは内部で数式を評価せず — ファイル内に式をそのまま保持し、スプレッドシート アプリケーション (Excel、LibreOffice Calc、または任意の互換リーダー) がファイルを開いたときに結果を計算します。

セルに数式を配置する方法は2つあります:

  1. セル コンストラクタ — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula プロパティ — ws.cells["A4"].formula = "=SUM(A1:A3)"

両方のアプローチは同じデータを格納します。コンストラクタ形式は、最初からシートを作成する場合に
コンパクトです;プロパティ形式は、すでに
既存のセルへの参照があり、そこに数式を添付したい場合により自然です。


セルコンストラクタによる数式の設定

Cell コンストラクタのシグネチャは Cell(value, formula) です。純粋な 数式セルを作成するには、None を値として、式文字列を第2引数として渡します:

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

##Input values
ws.cells["A1"] = Cell(10)
ws.cells["A2"] = Cell(25)
ws.cells["A3"] = Cell(15)

##Formula cell: value=None, formula="=SUM(A1:A3)"
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")

workbook.save("formula_constructor.xlsx")
print("Saved formula_constructor.xlsx")

value=None を設定すると、セルに静的な値がないことが明示されます — 表示される内容は完全に数式から取得されます。None でない値を数式と共に渡すことは許可されていますが、珍しいです; ほとんどのスプレッドシートリーダーは数式の結果を表示し、保存された値は無視します。


.formula プロパティを使用して数式を設定する

すでにセル参照を保持している場合、または以前に値が書き込まれていたセルに数式を追加したい場合は、cell.formula に直接代入します:

from aspose.cells_foss import Workbook

workbook = Workbook()
ws = workbook.worksheets[0]

##Write input data
for i, val in enumerate([4, 8, 15, 16, 23], start=1):
    ws.cells[f"A{i}"].value = val

##Attach a formula to an existing cell reference
cell = ws.cells["B1"]
cell.formula = "=AVERAGE(A1:A5)"

##Or assign directly by address
ws.cells["B2"].formula = "=MAX(A1:A5)"
ws.cells["B3"].formula = "=MIN(A1:A5)"

workbook.save("formula_property.xlsx")
print("Saved formula_property.xlsx")

式を逆に読む

数式セルを書き込んだ後、.formula を使用して式文字列を取得し .value を使用して、(存在すれば)それに付随して保存されている静的値を取得します。

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

ws.cells["A1"] = Cell(None, "=SUM(B1:B5)")

cell = ws.cells["A1"]

print(cell.formula)   # =SUM(B1:B5)
print(cell.value)     # None  (no static value was set)

実際には、.valueNone であり、Cell(None, formula) で作成された任意のセルに適用されます。
計算された値が数式と共にキャッシュされた状態で以前に保存された既存のブックブックを読み込むと、
.value は最後にキャッシュされた結果を返すことがあります — ただし、
この動作は元のアプリケーションがファイルを保存した方法に依存し、
新しい計算に対して信頼すべきではありません。

実行時に数式セルと通常の値セルを区別するには:

cell = ws.cells["A1"]
if cell.formula:
    print(f"Formula cell: {cell.formula}")
else:
    print(f"Value cell: {cell.value}")

一般的な Excel の数式

以下の表は、Aspose.Cells FOSS に直接渡すことができる例の数式文字列とともに、頻繁に使用される Excel 関数を一覧しています。

PurposeFormula stringNotes
範囲の合計=SUM(A1:A10)範囲内のすべての数値を加算します
範囲の平均=AVERAGE(A1:A10)空白セルを無視します
最大値=MAX(A1:A10)最大の数値を返します
最小値=MIN(A1:A10)最小の数値を返します
数値セルのカウント=COUNT(A1:A10)数値が含まれるセルのみをカウントします
空でないセルのカウント=COUNTA(A1:A10)空白でないセルをすべてカウントします
条件付き値=IF(A1>100,"High","Low")3 引数形式: 条件, 真の場合の結果, 偽の場合の結果
縦方向検索=VLOOKUP(D1,A1:B10,2,FALSE)正確一致(FALSE)が推奨されます
文字列の連結=CONCATENATE(A1," ",B1)または =A1&" "&B1 を使用
数値の丸め=ROUND(A1,2)第2引数は小数点以下の桁数です

すべての数式文字列は = で始める必要があります。
関数名は Excel 互換ファイルで
大文字小文字を区別しませんが、可読性のために慣例的な大文字表記が上記に示されています。


完全な例

以下の例は、列Aに数値の5行データセットを作成し、
列BにSUM、AVERAGE、MAX、MINの数式を書き込み、
結果をXLSXファイルに保存します。

from aspose.cells_foss import Workbook, Cell

workbook = Workbook()
ws = workbook.worksheets[0]

##--- Headers ---
ws.cells["A1"].value = "Value"
ws.cells["B1"].value = "Formula"
ws.cells["C1"].value = "Result (evaluated by Excel)"

##--- Input data in A2:A6 ---
input_values = [14, 28, 7, 35, 21]
for i, val in enumerate(input_values, start=2):
    ws.cells[f"A{i}"].value = val

##--- Formula labels in B column ---
ws.cells["B2"].value = "SUM"
ws.cells["B3"].value = "AVERAGE"
ws.cells["B4"].value = "MAX"
ws.cells["B5"].value = "MIN"

##--- Formulas in C column ---
ws.cells["C2"] = Cell(None, "=SUM(A2:A6)")
ws.cells["C3"] = Cell(None, "=AVERAGE(A2:A6)")
ws.cells["C4"] = Cell(None, "=MAX(A2:A6)")
ws.cells["C5"] = Cell(None, "=MIN(A2:A6)")

##--- Save ---
workbook.save("formulas_demo.xlsx")
print("Saved formulas_demo.xlsx")

このファイルを Excel または LibreOffice Calc で開くと、列 C に表示されます:

期待結果
C2=SUM(A2:A6)105
C3=AVERAGE(A2:A6)21
C4=MAX(A2:A6)35
C5=MIN(A2:A6)7

数式文字列は=で始める必要があります

ライブラリは文字列をそのまま保存します。先頭の=を省略すると、
スプレッドシートリーダーはテキストを数式ではなくリテラル文字列として扱います。

##Correct — starts with =
ws.cells["A1"].formula = "=SUM(B1:B5)"

##Wrong — treated as the literal text "SUM(B1:B5)", not a formula
ws.cells["A1"].formula = "SUM(B1:B5)"

範囲参照は標準のExcel A1表記を使用します

行列範囲は FirstCell:LastCell のように大文字の列文字と 1 から始まる行番号で記述されます: "A1:A10""B2:D5""C3:C3"。FOSS ライブラリは範囲文字列を変換または検証しません — 無効な範囲は文字通り保存され、開く時にスプレッドシートリーダーでエラーを引き起こします。

数式は文字列として保存され、評価されません

Aspose.Cells FOSS には数式エンジンが含まれていません。
計算された結果が必要な場合は
Python で数式の結果(たとえば、さらに計算を行うために)が必要な場合、
自分で値を計算し、.value を使用して静的値として書き込みます。
使用するのは
エンドユーザーがスプレッドシートアプリケーションでファイルを開く場合にのみ、数式を
評価できる場合です。

参照

 日本語