ทำงานกับสูตร

ภาพรวม

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.

มีสองวิธีในการใส่สูตรลงในเซลล์:

  1. คอนสตรัคเตอร์เซลล์ — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula คุณสมบัติ — ws.cells["A4"].formula = "=SUM(A1:A3)"

ทั้งสองวิธีเก็บข้อมูลเดียวกัน รูปแบบตัวสร้างจะกระชับเมื่อคุณสร้างแผ่นงานตั้งแต่ต้น; รูปแบบคุณสมบัติมีความเป็นธรรมชาติมากกว่าเมื่อคุณมีอ้างอิงถึงเซลล์ที่มีอยู่แล้วและต้องการแนบสูตรให้กับมัน.


การตั้งสูตรผ่านตัวสร้าง Cell

ตัว Cell ลายเซ็นของคอนสตรัคเตอร์คือ Cell(value, formula). เพื่อสร้าง เซลล์สูตร, ส่ง None เป็นค่าและสตริงของนิพจน์เป็นอาร์กิวเมนต์ที่สอง อาร์กิวเมนต์:

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)

ในทางปฏิบัติ, .value คือ None สำหรับเซลล์ใด ๆ ที่สร้างด้วย 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 ที่พบบ่อย

ตารางต่อไปนี้แสดงฟังก์ชัน Excel ที่ใช้บ่อยพร้อมตัวอย่างสตริงสูตรที่คุณสามารถส่งต่อไปยัง Aspose.Cells FOSS ได้โดยตรง.

วัตถุประสงค์สตริงสูตรหมายเหตุ
ผลรวมของช่วง=SUM(A1:A10)บวกค่าตัวเลขทั้งหมดในช่วง
ค่าเฉลี่ยของช่วง=AVERAGE(A1:A10)ละเว้นเซลล์ว่าง
ค่าสูงสุด=MAX(A1:A10)คืนค่าตัวเลขที่ใหญ่ที่สุด
ค่าต่ำสุด=MIN(A1:A10)คืนค่าตัวเลขที่เล็กที่สุด
นับเซลล์ที่เป็นตัวเลข=COUNT(A1:A10)นับเซลล์ที่มีค่าเป็นตัวเลขเท่านั้น
นับเซลล์ที่ไม่ว่าง=COUNTA(A1:A10)นับเซลล์ที่ไม่ว่างเปล่าใด ๆ
ค่าตามเงื่อนไข=IF(A1>100,"High","Low")รูปแบบสามอาร์กิวเมนต์: การทดสอบ, ผลลัพธ์เมื่อเป็นจริง, ผลลัพธ์เมื่อเป็นเท็จ
การค้นหาแนวตั้ง=VLOOKUP(D1,A1:B10,2,FALSE)การจับคู่ที่ตรงกันพอดี (FALSE) แนะนำ
ต่อสตริงเข้าด้วยกัน=CONCATENATE(A1," ",B1)หรือใช้ =A1&" "&B1
ปัดจำนวน=ROUND(A1,2)อาร์กิวเมนต์ที่สองคือตำแหน่งทศนิยม

สตริงสูตรทั้งหมดต้องเริ่มต้นด้วย =. ชื่อฟังก์ชันไม่สนใจตัวพิมพ์ใหญ่/เล็กใน ไฟล์ที่เข้ากันได้กับ Excel, แต่รูปแบบตัวพิมพ์ใหญ่ตามแบบแผนที่แสดงข้างต้นสำหรับ ความอ่านง่าย.


ตัวอย่างเต็ม

ตัวอย่างต่อไปนี้สร้างชุดข้อมูลห้าบรรทัดของค่าตัวเลขในคอลัมน์ A, จากนั้นเขียนสูตร SUM, AVERAGE, MAX, และ MIN ลงในคอลัมน์ B, และบันทึกผลลัพธ์เป็นไฟล์ 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)"

การอ้างอิงช่วงใช้รูปแบบ A1 ของ Excel มาตรฐาน

ช่วงแถว-คอลัมน์เขียนเป็น FirstCell:LastCell โดยใช้คอลัมน์ตัวพิมพ์ใหญ่ ตัวอักษรและหมายเลขแถวเริ่มจากหนึ่ง: "A1:A10", "B2:D5", "C3:C3". โครงการ FOSS ไลบรารีไม่แปลหรือยืนยันความถูกต้องของสตริงช่วง — ช่วงที่ไม่ถูกต้องจะ ถูกเก็บไว้ตามเดิมและทำให้เกิดข้อผิดพลาดในโปรแกรมอ่านสเปรดชีตขณะเปิดไฟล์.

สูตรจะถูกเก็บเป็นสตริง, ไม่ได้ประมวลผล

Aspose.Cells FOSS does not include a formula engine. If you need the computed ผลลัพธ์ของสูตรใน Python (เช่น เพื่อทำการคำนวณต่อไป), คำนวณค่าด้วยตนเองและเขียนเป็นค่าคงที่ด้วย .value. ใช้ สูตรเฉพาะเมื่อผู้ใช้ปลายทางจะเปิดไฟล์ในแอปพลิเคชันสเปรดชีต ที่สามารถประเมินผลได้.

ดูเพิ่มเติม

 ภาษาไทย