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 ô:
- Bộ khởi tạo ô —
ws.cells["A4"] = Cell(None, "=SUM(A1:A3)") .formulathuộ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ế, .value là None đố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 đích | Chuỗi công thức | Ghi 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àng | Công thức | Kế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
- Tham chiếu API: Tài liệu đầy đủ về lớp và phương thức cho
aspose.cells_foss - Cơ sở kiến thức: Hướng dẫn cách thực hiện theo nhiệm vụ
- Tổng quan sản phẩm: Tóm tắt tính năng và khả năng
- Bắt đầu / Cài đặt: cài đặt pip và thiết lập
- Blog: Giới thiệu Aspose.Cells FOSS: Tổng quan thư viện và khởi đầu nhanh