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:
- Pembina Sel —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulasifat —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.
| Tujuan | Rentetan formula | Nota |
|---|---|---|
| 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:
| Baris | Formula | Keputusan 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
- Rujukan API: Dokumentasi penuh kelas dan kaedah untuk
aspose.cells_foss - Pangkalan Pengetahuan: Panduan cara-cara berorientasikan tugas
- Gambaran Produk: Ringkasan ciri-ciri dan keupayaan
- Mula Menggunakan / Pemasangan: pemasangan pip dan persediaan
- Blog: Memperkenalkan Aspose.Cells FOSS: Gambaran perpustakaan dan permulaan cepat