Изменение ширины столбов приводит к ошибке открытия xlsx в numbers

def auto_adjust_columns_width(ccalc):
    # Загрузка книги Excel
    file_list = [f'{ccalc.chat.id}product_sum.xlsx',
                f'{ccalc.chat.id}total_sum.xlsx',
                f'{ccalc.chat.id}articles_sum.xlsx',
                f'{ccalc.chat.id}_wh_profit.xlsx']

    # Цикл по всем файлам
    for file_name in file_list:
        # Загружаем Excel файл
        book = load_workbook(file_name)

        # Цикл по всем листам документа
        for sheet_name in book.sheetnames:
            # Получаем текущий лист
            sheet = book[sheet_name]

            # Цикл по всем столбцам и устанавливаем ширину в зависимости от максимальной длины значения
            for column in sheet.columns:
                max_length = 0
                for cell in column:
                    # Если значение в ячейке не пустое
                    if cell.value is not None:
                        # Получаем длину значения
                        cell_length = len(str(cell.value))
                        # Если она больше текущей максимальной, то обновляем максимальную длину
                        if cell_length > max_length:
                            max_length = cell_length

                # Устанавливаем ширину столбца, учитывая отступы
                adjusted_width = (max_length + 2)
                sheet.column_dimensions[get_column_letter(column[0].column)].width = adjusted_width

        # Сохраняем изменения в файле
        book.save(f'Final_{file_name}')

До выполнения данного кода, файлы xlsx открываются как в Excel так и в Numbers, однако после его выполнения, файлы открываются только в Excel, а Numbers (не удается открыть данный файл). Подскажите в чем тут дело


Ответы (1 шт):

Автор решения: Vladimir
def auto_adjust_columns_width(ccalc):
    # Загрузка книги Excel
    file_list = [f'{ccalc.chat.id}product_sum.xlsx',
                 f'{ccalc.chat.id}total_sum.xlsx',
                 f'{ccalc.chat.id}articles_sum.xlsx',
                 f'{ccalc.chat.id}_wh_profit.xlsx']

    for file_name in file_list:
        # Создание нового имени файла с 'Final' перед расширением
        base_name, extension = os.path.splitext(file_name)
        new_file_name = f"{base_name}Final{extension}"

        with pd.ExcelWriter(new_file_name, engine='xlsxwriter') as writer:
            # Загрузка всех листов из файла Excel
            xls = pd.ExcelFile(file_name)
            for sheet_name in xls.sheet_names:
                df = pd.read_excel(xls, sheet_name=sheet_name)

                # Запись DataFrame в лист Excel
                df.to_excel(writer, sheet_name=sheet_name, index=False)
                workbook = writer.book
                worksheet = writer.sheets[sheet_name]

                # Автоматическая настройка ширины столбцов
                for idx, col in enumerate(df):
                    max_len = max(df[col].astype(str).str.len().max(), len(str(col))) + 2
                    worksheet.set_column(idx, idx, max_len)
→ Ссылка