web-dev-qa-db-fra.com

python - remplit les cellules avec des couleurs en utilisant openpyxl

J'utilise actuellement openpyxl v2.2.2 pour Python 2.7 et je voulais définir des couleurs pour les cellules. J'ai utilisé les importations suivantes

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

et voici le code que j'ai essayé d'utiliser:

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

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

ws['A1'].style = redFill

mais j'obtiens l'erreur suivante:

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

Toute idée sur la façon de définir la cellule A1 (ou toute autre cellule) avec des couleurs en utilisant openpyxl?

33
Ahmed Rashad

Je pense que le problème est que vous essayez d'affecter un objet de remplissage à un style.

ws['A1'].fill = redFill devrait fonctionner correctement.

39
Charlie Clark

Cela a fonctionné pour moi. Ils ont changé les choses et la plupart de l'aide que vous voyez sur Internet est destinée aux anciennes versions de la bibliothèque openpyxl de ce que je vois.

# Change background color 
xls_cell.style = Style(fill=PatternFill(patternType='solid',
                                        fill_type='solid', 
                                        fgColor=Color('C4C4C4')))
6
M T Head

L'API pour les styles a encore changé. Ce qui a fonctionné pour moi était

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

La couleur est une couleur alpha RVB hexadécimale. Vous pouvez le transmettre comme 'rrggbb' avec un alpha par défaut de 00 ou spécifier l’alpha avec 'aarrggbb'. Un groupe de couleurs est défini en tant que constantes dans openpyxl.styles.colors si vous devez en prendre un rapidement.

4
ldrg

dans python 3.x

wb = openpyxl.Workbook()
ws = wb.active
redFill = PatternFill(start_color='FFFF0000',
                   end_color='FFFF0000',
                   fill_type='solid')
ws['A1'].fill = redFill

cela fonctionne mais je ne sais pas dans python 2.x j'espère travailler juste mettre ws['A1'].fill=redFill

0
ismail