создать таблицу Excel и отрегулировать ширину столбца - PullRequest
0 голосов
/ 09 июля 2020

Я хочу добавить эту функцию, думаю, кому-то может быть полезно. Я читал так много ссылок и блогов и не мог найти, как это сделать.

Вы можете вызвать эту функцию, чтобы изменить существующий файл Excel. Он читает все рабочие места, чтобы создать таблицу Excel на каждом листе. Он изменяет ширину столбца, считывая самую длинную ячейку в каждом столбце, и настраивает этот столбец, используя это значение. Он перезаписывает файл Excel, поэтому он не должен открываться. Я написал этот код.

def formato_tabla(filename):
    xls = pd.ExcelFile(filename)
    hojas = xls.sheet_names
    writer = pd.ExcelWriter(filename, engine='xlsxwriter')
    i = 0
    while i < len(xls.sheet_names):
        hoja = xls.sheet_names[i]
        df = pd.read_excel(filename, sheet_name=hoja)
        df = df.applymap(str)
        df.to_excel(writer, index=False, sheet_name=hoja)
        wb = writer.book
        ws = writer.sheets[hoja]
        col_names = [{'header': col_name} for col_name in df.columns]
        ws.add_table(0, 0, df.shape[0], df.shape[1] - 1, {'columns': col_names})
        longitudes_campos = [max([len(row)+4 for row in df[df.columns[y]]]) for y in range(len(df.columns))]
        longitudes_nombres = [len(col) for col in df.columns]
        longitudes_max = list(zip(longitudes_campos, longitudes_nombres))
        longitudes_finales = [max(i) for i in longitudes_max]
        for z, width in enumerate(longitudes_finales):
            ws.set_column(z, z, width)
        i += 1

    writer.save()
    writer.close()
    print("Fichero con formato tabla generado")

Я не эксперт, всего несколько недель поработал с pyton, если кто-то может это улучшить, любые предложения будут оценены.

Я загрузил его в мой репозиторий. Это мой первый вклад, не знаю, работает ли это таким образом.

https://github.com/pponte81/Excel-modification.git

РЕДАКТИРОВАТЬ: я меняю одну строку (longitude_campos), потому что это не удалось в некоторых файлах, где были пустые ячейки (возвращено «TypeError: объект типа 'float' не имеет len ()»)

...