web-dev-qa-db-fra.com

Application d'une cellule dans OpenPyxl

J'essaie d'utiliser Openpyxl pour appliquer une bordure à une cellule, mais j'ai échoué à la tâche la plus élémentaire consistant à "appliquer tout type de bordure à une cellule quelconque". J'ai essayé de copier à partir de la documentation Openpyxl ( http://pythonhosted.org/openpyxl/styles.html#introduction ) le style par défaut et la modification, mais cela me donne 

"TypeError: init () a un argument de mot clé inattendu 'exposant'"

J'ai essayé de copier directement à partir d'un autre exemple ici ( Appliquer des bordures à toutes les cellules d'une plage avec openpyxl ), mais cela me donne 

AttributeError: l'objet type 'Border' n'a pas d'attribut 'BORDER_THIN'

(même après avoir corrigé les fautes de frappe et les erreurs d'importation insuffisantes).

Est-ce que quelqu'un sait comment appliquer des bordures avec Python 3.3 et OpenPyxl 2.0.4? Tout ce que je recherche, c'est un extrait de code qui, si je le copie-colle dans un script vierge, créera une bordure autour de n'importe quelle cellule d'un classeur. 

11
user2961794

Avec openpyxl version 2.2.5, cet extrait fonctionne pour moi:

from openpyxl.styles.borders import Border, Side
from openpyxl import Workbook

thin_border = Border(left=Side(style='thin'), 
                     right=Side(style='thin'), 
                     top=Side(style='thin'), 
                     bottom=Side(style='thin'))

wb = Workbook()
ws = wb.get_active_sheet()
# property cell.border should be used instead of cell.style.border
ws.cell(row=3, column=2).border = thin_border
wb.save('border_test.xlsx')
22
takasu

Avec openpyxl version 2.0.4, cet extrait fonctionne pour moi:

from openpyxl.styles.borders import Border, Side
from openpyxl.styles import Style
from openpyxl import Workbook

thin_border = Border(left=Side(style='thin'), 
                     right=Side(style='thin'), 
                     top=Side(style='thin'), 
                     bottom=Side(style='thin'))
my_style = Style(border=thin_border)

wb = Workbook()
ws = wb.get_active_sheet()
ws.cell(row=3, column=2).style = my_style
wb.save('border_test.xlsx')
5
FriendFX

Cette réponse fonctionne avec la version 2.4.8 La différence avec les deux réponses précédentes est que la propriété de Side est border_style, pas de style

from openpyxl.styles.borders import Border, Side, BORDER_THIN
thin_border = Border(
    left=Side(border_style=BORDER_THIN, color='00000000'),
    right=Side(border_style=BORDER_THIN, color='00000000'),
    top=Side(border_style=BORDER_THIN, color='00000000'),
    bottom=Side(border_style=BORDER_THIN, color='00000000')
)
ws.cell(row=3, column=2).border = thin_border

Utilisation de styles: https://openpyxl.readthedocs.io/en/2.5/styles.html

1
makkasi