Saltar al contenido

Simular columna de ajuste automático en xslxwriter

Hacemos una revisión exhaustiva cada escritos de nuestra web con la meta de enseñarte en todo momento la información veraz y certera.

Solución:

Como regla general, desea que el ancho de las columnas sea un poco más grande que el tamaño de las columnas más largas. string en la columna El ancho de 1 unidad de las columnas xlsxwriter es aproximadamente igual al ancho de un carácter. Por lo tanto, puede simular el ajuste automático configurando cada columna con el número máximo de caracteres en esa columna.

Por ejemplo, tiendo a usar el siguiente código cuando trabajo con pandas dataframes y xlsxwriter.

Primero encuentra el ancho máximo del índice, que siempre es la columna izquierda para que un marco de datos renderizado de pandas sobresalga. Luego, devuelve el máximo de todos los valores y el nombre de la columna para cada una de las columnas restantes que se mueven de izquierda a derecha.

No debería ser demasiado difícil adaptar este código para cualquier dato que esté utilizando.

def get_col_widths(dataframe):
    # First we find the maximum length of the index column   
    idx_max = max([len(str(s)) for s in dataframe.index.values] + [len(str(dataframe.index.name))])
    # Then, we concatenate this to the max of the lengths of column name and its values for each column, left to right
    return [idx_max] + [max([len(str(s)) for s in dataframe[col].values] + [len(col)]) for col in dataframe.columns]

for i, width in enumerate(get_col_widths(dataframe)):
    worksheet.set_column(i, i, width)

Estoy de acuerdo con Cole Diamond. Necesitaba hacer algo muy similar, funcionó bien para mí. donde self.columns es mi lista de columnas

def set_column_width(self):
    length_list = [len(x) for x in self.columns]
    for i, width in enumerate(length_list):
        self.worksheet.set_column(i, i, width)

Recientemente me encontré con este mismo problema y esto es lo que se me ocurrió:

r = 0
c = 0
for x in list:
    worksheet.set_column('0:0'.format(chr(c + ord('A'))), len(str(x)) + 2)
    worksheet.write(r, c, x)
    c += 1

en mi ejemplo r sería el número de fila al que está enviando, c sería el número de columna al que está enviando (ambos 0 indexados), y x seria el valor de list que quieres estar en la celda.

la '0:0'.format(chr(c + ord('A'))) pieza toma el número de columna provisto y lo convierte a la letra de columna aceptada por xlsxwriter, por lo que si c = 0set_column vería 'A:A'si c = 1 entonces vería 'B:B'y así.

la len(str(x)) + 2 pieza determina la longitud de la string está tratando de generar y luego agrega 2 para asegurarse de que la celda de Excel sea lo suficientemente ancha como la longitud del string no se correlaciona exactamente con el ancho de la celda. Es posible que desee jugar con en lugar de agregar 2 o posiblemente más dependiendo de sus datos.

Las unidades que acepta xlsxwriter son un poco más difíciles de explicar. Cuando esté en Excel y se desplace sobre donde puede cambiar el ancho de columna, verá Width: 8.43 (64 pixels). En este ejemplo la unidad que acepta es el 8.43, que creo que son centímetros? Pero Excel ni siquiera proporciona una unidad, al menos no explícitamente.

Nota: Solo probé esta respuesta en archivos de Excel que contienen 1 fila de datos. Si tendrá varias filas, deberá tener una forma de determinar qué fila tendrá la información ‘más larga’ y solo aplicar esto a esa fila. Pero si cada columna tendrá aproximadamente el mismo tamaño independientemente de la fila, entonces esto debería funcionar bien para usted.

¡Buena suerte y espero que esto ayude!

Sección de Reseñas y Valoraciones

Si conservas alguna sospecha o disposición de acrecentar nuestro noticia puedes ejecutar un paráfrasis y con placer lo observaremos.

¡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 *