web-dev-qa-db-fra.com

Alignement horizontal du texte dans openpyxl

J'essaie de changer l'alignement du texte au centre de 2 cellules fusionnées, j'ai trouvé des réponses qui ne fonctionnaient pas pour mon cas

currentCell = ws.cell('A1')
currentCell.style.alignment.horizontal = 'center' #TypeError: cannot set horizontal attribute
#or
currentCell.style.alignment.vertical = Alignment.HORIZONTAL_CENTER #AttributeError: type object 'Alignment' has no attribute 'HORIZONTAL_CENTER'

les deux n'ont pas fonctionné, y a-t-il d'autres façons de le faire?

14
Pythonizer

oui, il existe un moyen de le faire avec openpyxl:

from openpyxl.styles import Alignment

currentCell = ws.cell('A1') #or currentCell = ws['A1']
currentCell.alignment = Alignment(horizontal='center')

j'espère que ceci vous aidera

32
samsemilia7

C'est ce qui a finalement fonctionné pour moi avec la dernière version de PIP (2.2.5)

    # center all cells
    for col in w_sheet.columns:
        for cell in col:
            # openpyxl styles aren't mutable,
            # so you have to create a copy of the style, modify the copy, then set it back
            alignment_obj = cell.alignment.copy(horizontal='center', vertical='center')
            cell.alignment = alignment_obj
6
nmz787

Aucune des autres solutions n'a fonctionné pour moi, car ma solution nécessite openpyxl, et au moins dans 2.1.5 cell.alignment ne peut pas être défini directement.

from openpyxl.styles import Style, Alignment

cell = ws.cell('A1')
cell.style = cell.style.copy(alignment=Alignment(horizontal='center')) 

Ce qui précède copie le style actuel et remplace l'alignement. Vous pouvez également créer un tout nouveau style - avec toutes les valeurs non spécifiées prenant les valeurs par défaut de https://openpyxl.readthedocs.org/en/latest/styles.html

cell.style = Style(alignment=Alignment(horizontal='center'),font=Font(bold=True))

# or - a tidier way

vals = {'alignment':Alignment(horizontal='center'),
        'font':Font(bold=True),
       }
new_style = Style(**vals)
cell.style = new_style
4
mhorne

Vous pouvez y parvenir en utilisant la bibliothèque Python XlsxWriter .

import xlsxwriter

workbook = xlsxwriter.Workbook('example.xlsx')
worksheet = workbook.add_worksheet()

cell_format = workbook.add_format({'align': 'center'})

worksheet.merge_range('A1:B1', "")
worksheet.write_rich_string('A1','Example', cell_format)

workbook.close()

Ici, j'ai fusionné les cellules A1, B1 et ajouté un paramètre de format de cellule qui inclut le paramètre d'alignement assigné comme centre.

enter image description here

0
Tanveer Alam