Làm việc với Công thức

Tổng quan

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.

Có hai cách để đặt công thức vào một ô:

  1. Bộ khởi tạo ô — ws.cells["A4"] = Cell(None, "=SUM(A1:A3)")
  2. .formula thuộc tính — ws.cells["A4"].formula = "=SUM(A1:A3)"

Cả hai cách đều lưu trữ cùng một dữ liệu. Dạng hàm tạo gọn gàng khi bạn xây dựng bảng tính từ đầu; dạng thuộc tính tự nhiên hơn khi bạn đã có tham chiếu tới một ô hiện có và muốn gắn công thức vào đó.


Đặt công thức qua hàm tạo Cell

The Cell chữ ký của hàm khởi tạo là Cell(value, formula). Để tạo một ô công thức, truyền None làm giá trị và chuỗi biểu thức làm đối số thứ hai đối số:

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

Thiết lập value=None làm cho rõ ràng rằng ô không có giá trị tĩnh — nó nội dung hiển thị hoàn toàn đến từ công thức. Việc truyền một non-None giá trị cùng với công thức là được phép nhưng hiếm gặp; hầu hết các trình đọc bảng tính sẽ hiển thị kết quả công thức và bỏ qua giá trị đã lưu.


Thiết lập một Formula qua .formula Thuộc tính

Gán trực tiếp cho cell.formula khi bạn đã có một tham chiếu ô hoặc khi bạn muốn thêm một công thức vào ô đã được ghi trước đó bằng một giá trị:

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

Đọc lại công thức

Sau khi ghi một ô công thức, sử dụng .formula để lấy chuỗi biểu thức và .value để lấy bất kỳ giá trị tĩnh nào (nếu có) đã được lưu cùng với nó.

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)

Trong thực tế, .valueNone đối với bất kỳ ô nào được tạo bằng Cell(None, formula). Nếu bạn tải một workbook hiện có đã được lưu trước đó với các giá trị đã tính toán được lưu tạm cùng với các công thức, .value có thể trả về kết quả lưu tạm cuối cùng — nhưng điều này hành vi phụ thuộc vào cách ứng dụng gốc lưu tệp và nên không được dựa vào cho các phép tính mới.

Để phân biệt một ô công thức với ô chỉ chứa giá trị thông thường trong thời gian chạy:

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

Các công thức Excel phổ biến

Bảng dưới đây liệt kê các hàm Excel thường dùng kèm theo các chuỗi công thức mẫu mà bạn có thể truyền trực tiếp cho Aspose.Cells FOSS.

Mục đíchChuỗi công thứcGhi chú
Tổng một phạm vi=SUM(A1:A10)Cộng tất cả các giá trị số trong phạm vi
Trung bình của một phạm vi=AVERAGE(A1:A10)Bỏ qua các ô trống
Giá trị tối đa=MAX(A1:A10)Trả về số lớn nhất
Giá trị tối thiểu=MIN(A1:A10)Trả về số nhỏ nhất
Đếm các ô số=COUNT(A1:A10)Đếm các ô chỉ có giá trị số
Đếm các ô không rỗng=COUNTA(A1:A10)Đếm bất kỳ ô không trống nào
Giá trị có điều kiện=IF(A1>100,"High","Low")Dạng ba đối số: kiểm tra, kết quả-đúng, kết quả-sai
Tra cứu dọc=VLOOKUP(D1,A1:B10,2,FALSE)Khớp chính xác (FALSE) được khuyến nghị
Nối chuỗi=CONCATENATE(A1," ",B1)Hoặc sử dụng =A1&" "&B1
Làm tròn một số=ROUND(A1,2)Đối số thứ hai là số chữ số thập phân

Tất cả các chuỗi công thức phải bắt đầu bằng =. Tên hàm không phân biệt chữ hoa chữ thường trong các tệp tương thích Excel, nhưng dạng viết hoa thông thường được hiển thị ở trên cho độ dễ đọc.


Ví dụ đầy đủ

Ví dụ sau tạo một bộ dữ liệu năm hàng các giá trị số trong cột A, sau đó ghi các công thức SUM, AVERAGE, MAX và MIN vào cột B, và lưu kết quả thành tệp 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")

Khi tệp này được mở trong Excel hoặc LibreOffice Calc, cột C sẽ hiển thị:

HàngCông thứcKết quả mong đợi
C2=SUM(A2:A6)105
C3=AVERAGE(A2:A6)21
C4=MAX(A2:A6)35
C5=MIN(A2:A6)7

Ghi chú

Chuỗi công thức phải bắt đầu bằng =

Thư viện lưu trữ chuỗi nguyên trạng. Bỏ qua ký tự đầu = sẽ gây ra trình đọc bảng tính sẽ xem văn bản như một chuỗi nguyên văn thay vì công thức.

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

Tham chiếu phạm vi sử dụng ký hiệu A1 chuẩn của Excel

Các phạm vi hàng-cột được viết dưới dạng FirstCell:LastCell sử dụng cột viết hoa và các ký tự cột cùng số hàng bắt đầu từ 1: "A1:A10", "B2:D5", "C3:C3". Thư viện mã nguồn mở không dịch hoặc xác thực chuỗi phạm vi — một phạm vi không hợp lệ sẽ được lưu nguyên văn và gây lỗi cho trình đọc bảng tính khi mở.

Công thức được lưu dưới dạng chuỗi, không được tính toán

Aspose.Cells FOSS does not include a formula engine. If you need the computed kết quả của công thức trong Python (ví dụ, để thực hiện các phép tính tiếp theo), tự tính giá trị và ghi nó dưới dạng giá trị tĩnh với .value. Sử dụng công thức chỉ khi người dùng cuối mở tệp trong một ứng dụng bảng tính có thể tính toán chúng.

Xem Thêm

 Tiếng Việt