2014-10-31 23 views
6

Sono tryign per modificare l'allineamento del testo al centro di 2 fusi vende, ho trovato alcune risposte che non ha funzionato per il mio casoallineamento orizzontale del testo in openpyxl

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' 

entrambi hanno non lavoro, ci sono altri modi per farlo?

risposta

2

È possibile ottenere ciò utilizzando la libreria 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() 

cellule Qui ho unite A1, B1 e aggiunto un parametro di formato di cella che comprende il parametro allineamento assegnato come centro.

enter image description here

+1

titolo La domanda è «Hor [i] l'allineamento del testo zontale in ** ** openpyxl», corsivo è mio. Per favore considera che la mia osservazione non implica né che tu non abbia risposto a una parte della domanda OP, né che l'OP non possa decidere di passare a una biblioteca diversa e approvare la tua risposta. – gboffi

+0

@gboffi Avevo lavorato su xlsxwriter che ha ottime funzionalità per la scrittura di xls, ecco perché l'ho suggerito. Inoltre, come è menzionato come unire due celle e allinearlo al centro orizzontale che ho raggiunto con questo. Quindi OP può pensare a cambiare libreria se non funziona diversamente. –

+2

In questo caso penso che devi usare xlsxwriter perché non supportiamo gli stili per le celle unite in Openpyxl perché la specifica non definisce come dovrebbe essere gestita. –

9

Sì, c'è un modo per farlo con openpyxl:

from openpyxl.styles import Alignment 

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

speranza che questo vi aiuterà

4

Questo è quello che finalmente ha funzionato per me con l'ultima versione dal 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 
3

Nessuna delle altre soluzioni ha funzionato per io, dato che la mia soluzione richiede openpyxl, e almeno in 2.1.5 cell.alignment non può essere impostato direttamente.

from openpyxl.styles import Style, Alignment 

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

Quanto sopra copia lo stile corrente e sostituisce l'allineamento. È inoltre possibile creare uno stile tutto nuovo - con tutti i valori non specificati prendendo i valori di default da 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 
Problemi correlati