2015-05-27 30 views
18

Tôi hiện đang sử dụng openpyxl v2.2.2 cho Python 2.7 và tôi muốn đặt màu thành các ô. Tôi đã sử dụng hàng nhập khẩu saucác ô tô điền đầy màu sắc bằng cách sử dụng openpyxl

import openpyxl, 
from openpyxl import Workbook 
from openpyxl.styles import Color, PatternFill, Font, Border 
from openpyxl.styles import colors 
from openpyxl.cell import Cell 

và sau đây là mã tôi đã cố gắng sử dụng:

wb = openpyxl.Workbook() 
ws = wb.active 

redFill = PatternFill(start_color='FFFF0000', 
        end_color='FFFF0000', 
        fill_type='solid') 

ws['A1'].style = redFill 

nhưng tôi nhận được lỗi sau:

Traceback (most recent call last) 
    self.font = value.font.copy() 
AttributeError: 'PatternFill' object has no attribute 'font' 

Bất kỳ ý tưởng về làm thế nào để thiết lập tế bào A1 (hoặc bất kỳ tế bào khác) với màu sắc bằng cách sử dụng openpyxl?

+0

Bạn có thể cung cấp toàn bộ dấu vết sau – The6thSense

Trả lời

21

Tôi tin rằng vấn đề là bạn đang cố gán một đối tượng tô đầy cho một kiểu.

ws['A1'].fill = redFill sẽ hoạt động tốt.

+2

Cảm ơn Charlie. Tôi khá mới với Python và các tài liệu openpyxl không rõ ràng về cách áp dụng điền vào một ô. Câu trả lời của bạn đã giải quyết được vấn đề. –

4

Điều này phù hợp với tôi. Họ đã thay đổi mọi thứ và hầu hết sự trợ giúp bạn thấy trên internet là dành cho các phiên bản cũ hơn của thư viện openpyxl từ những gì tôi thấy.

# Change background color 
xls_cell.style = Style(fill=PatternFill(patternType='solid', 
             fill_type='solid', 
             fgColor=Color('C4C4C4'))) 
+1

Một điều cần lưu ý. Nếu bạn thực hiện nhiều thay đổi đối với các thay đổi trước đó của tế bào sẽ bị xóa đi với những thay đổi gần đây nhất. Nếu bạn muốn nói thay đổi 6, bạn phải làm tất cả 6 trong cùng một lệnh. Bạn không thể thay đổi từng cái một. Nếu bạn chỉ thay đổi cuối cùng sẽ vẫn tồn tại. –

2

API cho kiểu được thay đổi một lần nữa. Những gì đã hiệu quả đối với tôi là

my_red = openpyxl.styles.colors.Color(rgb='00FF0000') 
my_fill = openpyxl.styles.fills.PatternFill(patternType='solid', fgColor=my_red) 
cell.fill = my_fill 

Màu là màu alpha RGB hex. Bạn có thể chuyển nó ở dạng 'rrggbb' với alpha mặc định là 00 hoặc chỉ định alpha với 'aarrggbb'. Một loạt các màu được định nghĩa là hằng số trong openpyxl.styles.colors nếu bạn cần lấy một màu một cách nhanh chóng.

+1

my_fill = openpyxl.styles.fills.PatternFill (patternType = 'solid', fgColor = my_red) –

+0

Cảm ơn bạn Gourav! – ldrg

Các vấn đề liên quan