Условное форматирование под xlsxwriter enginer - PullRequest
0 голосов
/ 14 января 2020

У меня есть шесть разных значений в столбце данных «index_val», которые я импортировал в каждую новую таблицу для одной и той же книги.

df_dict = {}

    for zone in df['index_val'].unique():
        zone_df = df[df['index_val'] == zone]
        df_dict[zone] = zone_df

    def save_xlsx(df_dict, path):
        with pd.ExcelWriter(path) as writer:
            for key in df_dict:
                df_dict[key].to_excel(writer, key, index=False)
            writer.save()

    save_xlsx(df_dict, 'report.xlsx')

Вывод, созданный в листе Excel, не был отформатирован для соответствия ширине столбца. Скажем, значения в столбце 1 требуют ширины столбца 92, а значения в столбце B имеют ширину 16. Я пытался использовать метод set_column, но, поскольку имена листов хранятся в виде словаря, возникает ошибка.

Чак этих данных выглядит так:

name_char   index_val  count    
name1       A          36
name2       A          38
name3       B          76
name4       C          12
name3       C          25
name6       F          42

Будет 6 листов, каждый из которых будет иметь имена из index_val. Каждый лист будет иметь первый столбец name_char и второй столбец как уникальный index_val. Что мне нравится, так это установить ширину первого столбца равной 92, а второго столбца равным 16. Или существует ли процесс автоматического задания ширины для каждого столбца на основе их максимального значения столбца?

1 Ответ

1 голос
/ 14 января 2020

Вы можете сделать следующее:

df_dict = {}

for zone in df['index_val'].unique():
    zone_df = df[df['index_val'] == zone]
    df_dict[zone] = zone_df

def save_xlsx(df_dict, path):
    with pd.ExcelWriter(path) as writer:
        for key in df_dict:
            df_dict[key].to_excel(writer, key, index=False)
            workbook  = writer.book
            worksheet = writer.sheets[key]
            worksheet.set_column(1, 1, 92)
            worksheet.set_column(2, 2, 16)
        writer.save()

save_xlsx(df_dict, 'report.xlsx')

...