Изменение ширины столбов приводит к ошибке открытия 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)