Bekerja dengan Formula

Gambaran Keseluruhan

Aspose.Cells FOSS stores formulas as Excel-compatible strings. The library does not evaluate formulas internally — it preserves the expression verbatim in the file, and the spreadsheet application (Excel, LibreOffice Calc, or any compatible reader) computes the result when the file is opened.

Terdapat dua cara untuk meletakkan formula dalam sel:

  1. Pembina Sel — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula sifat — ws.cells["A4"].formula = "=SUM(A1:A3)"

Kedua-dua pendekatan menyimpan data yang sama. Bentuk konstruktor lebih ringkas apabila anda membina helaian dari awal; bentuk sifat lebih semulajadi apabila anda sudah mempunyai rujukan kepada sel yang sedia ada dan ingin melampirkan formula kepadanya.


Menetapkan Formula melalui Konstruktor Cell

The Cell tandatangan konstruktor ialah Cell(value, formula). Untuk mencipta sel murni sel formula, hantarkan None sebagai nilai dan rentetan ungkapan sebagai yang kedua argumen:

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")

Penetapan value=None menjadikannya jelas bahawa sel tidak mempunyai nilai statik — ia kandungan yang dipaparkan datang sepenuhnya daripada formula. Menyerahkan nilai bukan-None nilai bersama formula dibenarkan tetapi tidak biasa; kebanyakan pembaca hamparan akan memaparkan hasil formula dan mengabaikan nilai yang disimpan.


Menetapkan Formula melalui .formula Sifat

Berikan secara langsung kepada cell.formula apabila anda sudah memegang rujukan sel atau apabila anda ingin menambah formula ke sel yang sebelum ini ditulis dengan nilai:

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")

Membaca Kembali Formula

Selepas menulis sel formula, gunakan .formula untuk mendapatkan rentetan ungkapan dan .value untuk mendapatkan sebarang nilai statik (jika ada) yang disimpan bersamanya.

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)

Dalam amalan, .value adalah None untuk sebarang sel yang dicipta dengan Cell(None, formula). Jika anda memuatkan buku kerja sedia ada yang sebelum ini disimpan dengan nilai yang dikira disimpan dalam cache bersama formula, .value mungkin mengembalikan hasil cache terakhir — tetapi ini tingkah laku bergantung pada bagaimana aplikasi asal menyimpan fail dan seharusnya tidak boleh dipercayai untuk pengiraan baru.

Untuk membezakan sel formula daripada sel nilai biasa semasa runtime:

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

Formula Excel Biasa

Jadual berikut menyenaraikan fungsi Excel yang sering digunakan dengan contoh rentetan formula yang anda boleh hantarkan secara langsung kepada Aspose.Cells FOSS.

TujuanRentetan formulaNota
Jumlahkan julat=SUM(A1:A10)Menambah semua nilai berangka dalam julat
Purata julat=AVERAGE(A1:A10)Mengabaikan sel kosong
Nilai maksimum=MAX(A1:A10)Mengembalikan nombor terbesar
Nilai minimum=MIN(A1:A10)Mengembalikan nombor terkecil
Kira sel berangka=COUNT(A1:A10)Mengira sel yang hanya mengandungi nilai berangka
Kira sel yang tidak kosong=COUNTA(A1:A10)Mengira sebarang sel yang tidak kosong
Nilai bersyarat=IF(A1>100,"High","Low")Bentuk tiga-argumen: ujian, hasil-true, hasil-false
Carian menegak=VLOOKUP(D1,A1:B10,2,FALSE)Padanan tepat (FALSE) disarankan
Gabungkan rentetan=CONCATENATE(A1," ",B1)Atau gunakan =A1&" "&B1
Bulatkan nombor=ROUND(A1,2)Argumen kedua ialah tempat perpuluhan

Semua rentetan formula mesti bermula dengan =. Nama fungsi tidak sensitif huruf besar/kecil dalam fail yang serasi dengan Excel, tetapi bentuk huruf besar konvensional ditunjukkan di atas untuk kebolehbacaan.


Contoh Lengkap

Contoh berikut menghasilkan set data lima baris nilai berangka dalam lajur A, kemudian menulis formula SUM, AVERAGE, MAX, dan MIN ke dalam lajur B, dan menyimpan hasilnya ke dalam fail 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")

Apabila fail ini dibuka dalam Excel atau LibreOffice Calc, lajur C akan memaparkan:

BarisFormulaKeputusan dijangka
C2=SUM(A2:A6)105
C3=AVERAGE(A2:A6)21
C4=MAX(A2:A6)35
C5=MIN(A2:A6)7

Nota

Rentetan formula mesti bermula dengan =

Pustaka menyimpan rentetan seperti sedia ada. Mengabaikan awalan = menyebabkan pembaca hamparan menganggap teks sebagai rentetan literal dan bukannya formula.

##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)"

Rujukan julat menggunakan notasi A1 standard Excel

Julat baris-lajur ditulis sebagai FirstCell:LastCell menggunakan lajur huruf besar huruf dan nombor baris berasaskan satu: "A1:A10", "B2:D5", "C3:C3". Perisian Sumber Terbuka (FOSS) pustaka tidak menterjemah atau mengesahkan rentetan julat — julat tidak sah akan disimpan secara verbatim dan menyebabkan ralat dalam pembaca hamparan semasa dibuka.

Formula disimpan sebagai rentetan, tidak dinilai

Aspose.Cells FOSS does not include a formula engine. If you need the computed keputusan formula dalam Python (contohnya, untuk melakukan pengiraan lanjut), kira nilai itu sendiri dan tulis sebagai nilai statik dengan .value. Gunakan formula hanya apabila pengguna akhir akan membuka fail dalam aplikasi hamparan yang dapat menilai mereka.

Lihat Juga

 Bahasa Melayu