Saltar al contenido

cómo hacer el ‘formato como tabla’ de excel en python

Orlando, miembro de este gran equipo de trabajo, nos ha hecho el favor de redactar este tutorial ya que domina perfectamente el tema.

Solución:

Puedes hacerlo con Pandas también. Aquí hay un ejemplo:

import pandas as pd

df = pd.DataFrame(
    'city': ['New York', 'London', 'Prague'], 
    'population': [19.5, 7.4, 1.3], 
    'date_of_birth': ['1625', '43', 'early 8th century'],
    'status_of_magnetism': ['nice to visit', 'nice to visit', 'definetely MUST visit']
)

# initialize ExcelWriter and set df as output
writer = pd.ExcelWriter(r'D:tempsample.xlsx', engine='xlsxwriter') 
df.to_excel(writer, sheet_name='Cities', index=False)

# worksheet is an instance of Excel sheet "Cities" - used for inserting the table
worksheet = writer.sheets['Cities']
# workbook is an instance of the whole book - used i.e. for cell format assignment 
workbook = writer.book

Luego defina el formato de una celda (es decir, gire el texto, establezca la alineación vertical y horizontal) a través de workbook.add_format

header_cell_format = workbook.add_format()
header_cell_format.set_rotation(90)
header_cell_format.set_align('center')
header_cell_format.set_align('vcenter')

Después…

# create list of dicts for header names 
#  (columns property accepts 'header': value as header name)
col_names = ['header': col_name for col_name in df.columns]

# add table with coordinates: first row, first col, last row, last col; 
#  header names or formatting can be inserted into dict 
worksheet.add_table(0, 0, df.shape[0], df.shape[1]-1, 
    'columns': col_names,
    # 'style' = option Format as table value and is case sensitive 
    # (look at the exact name into Excel)
    'style': 'Table Style Medium 10'
)

Alternativamente worksheet.add_table('A1:D'.format(shape[0]), ...) se puede usar, pero para df con más columnas o posición de inicio desplazada, las combinaciones AA, AB, … tendrían que calcularse (en lugar de “D”)

Y, por último, el siguiente bucle reescribe los encabezados y aplica el formato header_cell_. que ya hicimos en worksheet.add_table(...) y parece redundante, pero esta es una forma de usar Excel Autoajustar opción: sin esto, todas las celdas del encabezado tendrían un ancho predeterminado (o la altura de la celda si usa la rotación de 90 grados) y, por lo tanto, no se vería todo el contenido o se tendría que aplicar set_shrink () … y luego el contenido sería no ser legible :). (probado en Office 365)

# skip the loop completly if AutoFit for header is not needed
for i, col in enumerate(col_names):
    # apply header_cell_format to cell on [row:0, column:i] and write text value from col_names in
    worksheet.write(0, i, col['header'], header_cell_format)

# save writer object and created Excel file with data from DataFrame     
writer.save()

OK, después de buscar en la web, me di cuenta de que con xlwt no es posible hacerlo, pero con XlsxWriter es posible y muy fácil y conveniente.

Reseñas y calificaciones del tutorial

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *