2015-05-27 15 views
18

Attualmente sto usando openpyxl v2.2.2 per Python 2.7 e volevo impostare i colori sulle celle. Ho usato le seguenti importazionipython - riempie le celle con i colori usando 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 

ed il seguente è il codice che ho provato ad utilizzare:

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

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

ws['A1'].style = redFill 

ma ottengo il seguente errore:

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

Qualche idea su come impostare cella A1 (o qualsiasi altra cella) con colori usando openpyxl?

+0

Potrebbe fornire la traccia completa indietro – The6thSense

risposta

21

Credo che il problema è che si sta tentando di assegnare un oggetto di riempimento a uno stile.

ws['A1'].fill = redFill dovrebbe funzionare correttamente.

+2

Grazie Charlie. Sono abbastanza nuovo per Python e i documenti openpyxl non erano chiari su come applicare il riempimento a una cella. La tua risposta ha risolto il problema. –

4

Questo ha funzionato per me. Hanno cambiato le cose e la maggior parte dell'aiuto che vedi su Internet è per le versioni precedenti della libreria openpyxl da quello che sto vedendo.

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

Qualcosa su cui stare attenti. Se apporti più modifiche alla cella, le modifiche precedenti vengono cancellate con le modifiche più recenti. Se vuoi dire 6 modifiche, devi fare tutte e 6 nello stesso comando. Non puoi cambiarli uno per uno. Se fai solo l'ultima modifica persisterà. –

2

L'API per gli stili è stata modificata di nuovo. Ciò che ha funzionato per me è stato

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

Il colore è un colore esadecimale alfa RGB. È possibile passarlo come 'rrggbb' con un alfa predefinito di 00 o specificare l'alfa con 'aarrggbb'. Un gruppo di colori è definito come costanti in openpyxl.styles.colors se è necessario recuperarne uno rapidamente.

+1

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

+0

Grazie Gourav! – ldrg