Cách Định dạng Ô với Aspose.Cells FOSS trong Python

Cách Định dạng Ô với Aspose.Cells FOSS trong Python

Aspose.Cells FOSS for Python cho phép bạn áp dụng kiểu chữ và màu nền cho các ô riêng lẻ bằng cách sử dụng cell.style.fontcell.style.fill API. Màu sắc được biểu thị dưới dạng 8-digit AARRGGBB hex strings; ví dụ "FFFF0000" đối với màu đỏ đậm, không có # tiền tố. Tất cả việc tạo kiểu được thực hiện trong Python thuần túy mà không phụ thuộc vào Microsoft Excel hay bất kỳ thư viện render nào bên ngoài.

Tại sao nên định dạng ô với Aspose.Cells FOSS?

  1. Không cần Excel: Việc định dạng chạy hoàn toàn trong Python trên bất kỳ hệ điều hành nào.
  2. Mô hình màu nhất quán: Một chuỗi 8 chữ số AARRGGBB duy nhất bao phủ cả màu chữ và màu nền với cùng định dạng.
  3. Tên thuộc tính dễ đọc: bold, italic, underline, strikethrough: không is_ tiền tố để nhớ.
  4. Đối tượng Font có thể tái sử dụng: Tạo một Font đối tượng một lần và áp dụng nó cho nhiều ô để duy trì thương hiệu nhất quán.

Hướng Dẫn Từng Bước

Bước 1: Cài đặt Aspose.Cells FOSS cho Python

pip install aspose-cells-foss

Không cần gói hệ thống bổ sung nào. Nhập các lớp bạn cần từ aspose.cells_foss:

from aspose.cells_foss import Workbook, Cell, Font, SaveFormat

Bước 2: Đặt Tên và Kích Thước Phông

Truy cập một ô qua ws.cells["address"] và ghi vào cell.style.font.namecell.style.font.size.

from aspose.cells_foss import Workbook

workbook = Workbook()
ws = workbook.worksheets[0]

ws.cells["A1"].value = "Styled Header"

cell = ws.cells["A1"]
cell.style.font.name = "Arial"
cell.style.font.size = 14

workbook.save("styled.xlsx")

Phông chữ mặc định là Calibri ở 11pt. Bất kỳ tên phông chữ nào có sẵn trên hệ thống nơi tệp sẽ được mở đều có thể được sử dụng; việc chỉ định một phông chữ không được cài đặt sẽ không gây lỗi nhưng có thể hiển thị bằng phông chữ dự phòng khi tệp được mở.


Bước 3: Đặt Màu Phông Bằng Chuỗi Hex AARRGGBB

Màu phông chữ được đặt bằng một 8-digit hexadecimal string trong AARRGGBB thứ tự (Alpha, Red, Green, Blue). không bao gồm một # tiền tố.

from aspose.cells_foss import Workbook

workbook = Workbook()
ws = workbook.worksheets[0]

ws.cells["A1"].value = "Red text"
ws.cells["A1"].style.font.color = "FFFF0000"   # opaque red

ws.cells["A2"].value = "Blue text"
ws.cells["A2"].style.font.color = "FF0000FF"   # opaque blue

ws.cells["A3"].value = "Green text"
ws.cells["A3"].style.font.color = "FF00FF00"   # opaque green

workbook.save("colored_text.xlsx")

Tham chiếu màu AARRGGBB thường dùng:

Màuchuỗi AARRGGBBGhi chú
ĐenFF000000Màu phông chữ mặc định
TrắngFFFFFFFFSử dụng trên nền tối
ĐỏFFFF0000Cảnh báo hoặc làm nổi bật văn bản
Xanh dươngFF0000FFLiên kết hoặc nhấn mạnh
Xanh láFF00FF00Giá trị dương hoặc thành công
CamFFFF8000Văn bản cảnh báo
XámFF808080Văn bản nhạt hoặc bị vô hiệu hoá
Xanh hải quânFF1E64C8Màu xanh doanh nghiệp / thương hiệu

Hai chữ số thập lục đầu tiên là kênh alpha. Sử dụng FF để hoàn toàn không trong suốt. Các giá trị dưới FF sẽ tạo ra kết quả bán trong suốt trong các trình render hỗ trợ pha trộn alpha.


Bước 4: Áp dụng Đậm, Nghiêng, Gạch chân và Gạch ngang

Đặt mỗi thuộc tính trực tiếp dưới dạng boolean. Các tên thuộc tính là bold, italic, underline, và strikethrough; làm không sử dụng is_bold hoặc is_italic (các tên đó không tồn tại trên API FOSS và sẽ gây ra AttributeError).

from aspose.cells_foss import Workbook

workbook = Workbook()
ws = workbook.worksheets[0]

ws.cells["A1"].value = "Bold"
ws.cells["A1"].style.font.bold = True

ws.cells["A2"].value = "Italic"
ws.cells["A2"].style.font.italic = True

ws.cells["A3"].value = "Underline"
ws.cells["A3"].style.font.underline = True

ws.cells["A4"].value = "Strikethrough"
ws.cells["A4"].style.font.strikethrough = True

ws.cells["A5"].value = "Bold + Italic"
ws.cells["A5"].style.font.bold = True
ws.cells["A5"].style.font.italic = True

workbook.save("font_styles.xlsx")

Tất cả bốn cờ mặc định là False. Chúng có thể được kết hợp tự do trên cùng một ô.


Bước 5: Đặt màu nền đặc

Sử dụng cell.style.fill.set_solid_fill("AARRGGBB") để áp dụng màu nền. Định dạng màu là chuỗi hex 8 ký tự AARRGGBB giống như màu phông chữ.

Để xóa hoàn toàn màu nền, gọi cell.style.fill.set_no_fill().

from aspose.cells_foss import Workbook

workbook = Workbook()
ws = workbook.worksheets[0]

ws.cells["A1"].value = "Navy background"
ws.cells["A1"].style.fill.set_solid_fill("FF1E64C8")   # opaque navy blue

ws.cells["A2"].value = "Light yellow background"
ws.cells["A2"].style.fill.set_solid_fill("FFFFFFCC")   # pale yellow

ws.cells["A3"].value = "No fill"
ws.cells["A3"].style.fill.set_no_fill()                 # remove any fill

workbook.save("cell_fills.xlsx")

set_solid_fill()set_no_fill() là loại loại lẫn nhau; việc gọi một sẽ ghi đè lên cái còn lại trên cùng một ô.


Bước 6: Kết hợp nhiều kiểu dáng trên một ô

Bạn có thể xâu chuỗi bất kỳ số lượng thuộc tính kiểu dáng nào trên cùng một tham chiếu ô. Không có giới hạn về số lượng thuộc tính kiểu dáng được đặt trước khi lưu.

from aspose.cells_foss import Workbook

workbook = Workbook()
ws = workbook.worksheets[0]

ws.cells["B2"].value = "Branded Header"

cell = ws.cells["B2"]

##Font
cell.style.font.name  = "Arial"
cell.style.font.size  = 16
cell.style.font.bold  = True
cell.style.font.color = "FFFFFFFF"      # white text

##Background
cell.style.fill.set_solid_fill("FF1E64C8")   # navy fill

workbook.save("branded_header.xlsx")
print("Branded header cell saved.")

Điều này tạo ra nhãn màu trắng, đậm, kích thước 16pt Arial trên nền màu xanh hải quân, một mẫu thường dùng cho tiêu đề cột.


Bước 7: Sử dụng Constructor Font cho các kiểu dáng có thể tái sử dụng

Lớp Font có thể được khởi tạo với tất cả các thuộc tính trong một lần gọi, sau đó gán cho nhiều ô. Điều này hữu ích khi bạn muốn áp dụng một phong cách đồng nhất cho nhiều ô mà không phải lặp lại các phép gán thuộc tính giống nhau.

from aspose.cells_foss import Workbook, Font

workbook = Workbook()
ws = workbook.worksheets[0]

##Define a reusable heading font
heading_font = Font(
    name="Arial",
    size=14,
    color="FF1E64C8",   # navy
    bold=True,
    italic=False,
    underline=False,
    strikethrough=False
)

##Define a reusable body font
body_font = Font(
    name="Calibri",
    size=11,
    color="FF000000",   # black (default)
    bold=False,
    italic=False,
    underline=False,
    strikethrough=False
)

##Apply heading font to header row
headers = ["Product", "SKU", "Price", "Stock"]
for col, header in enumerate(headers):
    addr = f"{chr(65 + col)}1"
    ws.cells[addr].value = header
    ws.cells[addr].style.font = heading_font
    ws.cells[addr].style.fill.set_solid_fill("FFE8EFF9")  # light blue tint

##Apply body font to data rows
data = [
    ("Widget A", "WGT-001", 9.99,  150),
    ("Widget B", "WGT-002", 14.99, 87),
    ("Widget C", "WGT-003", 4.49,  320),
]

for row_idx, (name, sku, price, stock) in enumerate(data, start=2):
    ws.cells[f"A{row_idx}"].value = name
    ws.cells[f"B{row_idx}"].value = sku
    ws.cells[f"C{row_idx}"].value = price
    ws.cells[f"D{row_idx}"].value = stock
    for col in "ABCD":
        ws.cells[f"{col}{row_idx}"].style.font = body_font

workbook.save("product_table.xlsx")
print("Product table with reusable fonts saved.")

Giá trị mặc định của hàm khởi tạo Font (tất cả các tham số đều là tùy chọn):

Tham sốMặc định
name"Calibri"
size11
color"FF000000"
boldFalse
italicFalse
underlineFalse
strikethroughFalse

Ví dụ Hoạt động Hoàn chỉnh

Đoạn script tự chứa dưới đây tạo một workbook với hàng tiêu đề được định dạng, các hàng dữ liệu có màu, và một ô tổng hợp thể hiện mọi API định dạng đã được đề cập ở trên:

from aspose.cells_foss import Workbook, Cell, Font, SaveFormat

workbook = Workbook()
ws = workbook.worksheets[0]
ws.name = "Sales Report"

##--- Header row (bold, white text on navy background) ---
headers = ["Region", "Q1", "Q2", "Q3", "Q4", "Total"]
for col, text in enumerate(headers):
    addr = f"{chr(65 + col)}1"
    ws.cells[addr].value = text
    ws.cells[addr].style.font.name  = "Arial"
    ws.cells[addr].style.font.size  = 12
    ws.cells[addr].style.font.bold  = True
    ws.cells[addr].style.font.color = "FFFFFFFF"            # white
    ws.cells[addr].style.fill.set_solid_fill("FF1E64C8")    # navy

##--- Data rows ---
data = [
    ("North", 42000, 47500, 53000, 61000),
    ("South", 31000, 28500, 35000, 39000),
    ("East",  55000, 62000, 58000, 71000),
    ("West",  27000, 30000, 33000, 41000),
]

for row_idx, (region, q1, q2, q3, q4) in enumerate(data, start=2):
    ws.cells[f"A{row_idx}"].value = region
    ws.cells[f"B{row_idx}"].value = q1
    ws.cells[f"C{row_idx}"].value = q2
    ws.cells[f"D{row_idx}"].value = q3
    ws.cells[f"E{row_idx}"].value = q4
    # Total formula
    ws.cells[f"F{row_idx}"] = Cell(None, f"=SUM(B{row_idx}:E{row_idx})")
    # Alternate row shading
    if row_idx % 2 == 0:
        for col in "ABCDEF":
            ws.cells[f"{col}{row_idx}"].style.fill.set_solid_fill("FFE8EFF9")

##--- Italic note in a footer cell ---
ws.cells["A7"].value = "All values in USD"
ws.cells["A7"].style.font.italic = True
ws.cells["A7"].style.font.color  = "FF808080"   # gray
ws.cells["A7"].style.font.size   = 9

##--- Strikethrough on a deprecated label ---
ws.cells["A8"].value = "Old metric (deprecated)"
ws.cells["A8"].style.font.strikethrough = True
ws.cells["A8"].style.font.color         = "FF808080"

workbook.save("sales_report_styled.xlsx", SaveFormat.XLSX)
print("Styled sales report saved.")

Các Vấn đề Thường gặp

Định dạng màu sai: sử dụng #RRGGBB thay vì AARRGGBB

Một ký tự đầu # (ví dụ. "#FF0000") hoặc một chuỗi RGB 6 ký tự sẽ không tạo ra màu mong muốn. Thuộc tính yêu cầu chính xác 8 hex digits with no prefix: "FFFF0000". Hai chữ số đầu tiên là kênh alpha; sử dụng FF cho hoàn toàn không trong suốt.

AttributeError: 'Font' object has no attribute 'is_bold'

API FOSS sử dụng bold, italic, underline, và strikethrough như là tên thuộc tính. The is_bold / is_italic quy ước đặt tên thuộc về một thư viện khác và không tồn tại ở đây. Thay thế bất kỳ is_bold tham chiếu bằng bold.

Thay đổi kiểu không hiển thị sau khi lưu

Đảm bảo bạn đặt các thuộc tính kiểu dáng trên đối tượng ô trước gọi workbook.save(). Việc đặt một thuộc tính trên ô sau khi gọi lưu không ảnh hưởng đến tệp đã được ghi. Nếu bạn tái sử dụng một cell biến, hãy xác nhận nó vẫn tham chiếu đến địa chỉ ô đúng.

Lớp nền và phông chữ trên cùng một ô gây xung đột về mặt hình ảnh

Không có xung đột API; bạn luôn có thể đặt cả hai cell.style.font.colorcell.style.fill.set_solid_fill() một cách độc lập. Đảm bảo màu văn bản có độ tương phản đủ so với màu nền. Văn bản trắng (FFFFFFFF) trên nền tối như màu xanh hải quân (FF1E64C8) là một sự kết hợp đáng tin cậy.


Câu hỏi thường gặp

Làm thế nào để xóa nền và đưa ô trở lại trạng thái không có nền?

Gọi cell.style.fill.set_no_fill(). Điều này sẽ xóa bất kỳ màu nền đặc nào đã được đặt trước đó khỏi ô.

Làm thế nào để đặt lại ô về phông chữ mặc định (Calibri 11pt màu đen)?

Gán lại các giá trị mặc định một cách rõ ràng:

cell.style.font.name          = "Calibri"
cell.style.font.size          = 11
cell.style.font.color         = "FF000000"
cell.style.font.bold          = False
cell.style.font.italic        = False
cell.style.font.underline     = False
cell.style.font.strikethrough = False

Hoặc, tạo một Font() tạo một instance không có đối số (tất cả mặc định) và gán nó: cell.style.font = Font().

Tôi có thể áp dụng cùng một kiểu phông chữ cho một dải ô trong vòng lặp không?

Có. Lặp qua các địa chỉ ô và đặt cùng các thuộc tính cho mỗi ô. Nếu bạn sử dụng the Font constructor để tạo một shared Font object, gán nó cho mỗi ô với ws.cells[addr].style.font = my_font.

Việc định dạng có ảnh hưởng đến giá trị ô hoặc công thức không?

Không. Định dạng chỉ là siêu dữ liệu trực quan. cell.style.fontcell.style.fill không chạm vào .value hoặc .formula.

Các định dạng lưu nào bảo toàn định dạng?

Các kiểu được giữ nguyên hoàn toàn khi lưu vào SaveFormat.XLSX. Các SaveFormat.CSV, SaveFormat.TSV, SaveFormat.JSON, và SaveFormat.MARKDOWN các định dạng là các định dạng văn bản thuần hoặc văn bản có cấu trúc và không chứa thông tin định dạng.


Tài nguyên liên quan:

 Tiếng Việt