J'ai un fichier Excel que je souhaite formater. La première ligne (à l'exclusion des en-têtes donc row2) doit être rouge et en italique.
la documentation Openpyxl indique :
Si vous souhaitez appliquer des styles à des lignes et des colonnes entières, vous devez appliquer le style à chaque cellule vous-même
Personnellement, je pense que cela pue ... Voici ma solution:
import openpyxl
from openpyxl.styles import NamedStyle
from openpyxl import load_workbook
from openpyxl.styles.colors import RED
from openpyxl.styles import Font
# I normally import a lot of stuff... I'll also take suggestions here.
file = 'MY_PATH'
wb = load_workbook(filename=file)
sheet = wb.get_sheet_by_name('Output')
for row in sheet.iter_rows():
for cell in row:
if '2' in cell.coordinate:
# using str() on cell.coordinate to use it in sheet['Cell_here']
sheet[str(cell.coordinate)].font = Font(color='00FF0000', italic=True)
wb.save(filename=file)
Le premier inconvénient est que s'il y a plus de cellules telles que A24
Ma boucle lui appliquera le formatage. Je peux résoudre ce problème avec une expression régulière. Serait-ce la bonne approche?
En fin de compte, existe-t-il une meilleure façon d'appliquer un format à la ligne entière? Aussi. Quelqu'un peut-il m'orienter dans la bonne direction vers une documentation bien Openpyxl? Je n'ai découvert que sheet.iter_rows()
et cell.coordinates
Sur Stack.
Il n'est pas nécessaire d'itérer sur toutes les lignes si vous souhaitez uniquement modifier la couleur de la deuxième ligne, vous pouvez simplement itérer sur une seule ligne comme suit:
import openpyxl
from openpyxl import load_workbook
from openpyxl.styles import Font
file = 'input.xlsx'
wb = load_workbook(filename=file)
ws = wb['Output']
red_font = Font(color='00FF0000', italic=True)
# Enumerate the cells in the second row
for cell in ws["2:2"]:
cell.font = red_font
wb.save(filename=file)
Vous donnant quelque chose comme:
L'accès à plusieurs cellules est décrit dans les documents openpyxl: Accès à plusieurs cellules
Alternativement, pour utiliser un NamedStyle
:
import openpyxl
from openpyxl import load_workbook
from openpyxl.styles import Font, NamedStyle
file = 'input.xlsx'
wb = load_workbook(filename=file)
ws = wb.get_sheet_by_name('Output')
# Create a NamedStyle (if not already defined)
if 'red_italic' not in wb.named_styles:
red_italic = NamedStyle(name="red_italic")
red_italic.font = Font(color='00FF0000', italic=True)
wb.add_named_style(red_italic)
# Enumerate the cells in the second row
for cell in ws["2:2"]:
cell.style = 'red_italic'
wb.save(filename=file)