Как копировать строки таблицы, сохраняя исходный размер и форматирование?

У меня есть код для копирования строк таблицы без сохранения прежних размеров, выделений полужирным цветом,размеров шрифта,т.е. оригинального стиля(формата) с помощью библиотеки openpyxl:

from openpyxl import Workbook,load_workbook
wb = load_workbook('/home/alexander/Desktop/my_file.xlsx')
ws = wb['Лист1']

wb2 = Workbook()
ws2 = wb2.active

a = ws.values # создает генератор строк со значениями в каждой ячейке,
for i in a:
    ws2.append(i)    
wb2.save('/home/alexander/Desktop/myfile2.xlsx')

Можно ли хотя бы сохранить прежние размеры столбцов, желательно средствами openpyxl, или если нет, то через другие библиотеки?


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

Автор решения: Alexander

На основе ответа Oscar адаптировал решение для своей задачи:

from openpyxl import Workbook,load_workbook
from copy import copy
wb = load_workbook('/home/alexander/Desktop/my_file.xlsx')
ws = wb['Лист1']

wb2 = Workbook()
ws2 = wb2.active

if ws.sheet_format.defaultColWidth is None:
    print('Unable to copy default column wide')
else:
    ws2.sheet_format.defaultColWidth = copy(ws.sheet_format.defaultColWidth)

for (row, col), cell in ws._cells.items():
    new_cell = ws2.cell(column=col, row=row)
    new_cell._value = cell._value
    new_cell.data_type = cell.data_type
        
    if cell.has_style:
        new_cell.font = copy(cell.font)
        new_cell.border = copy(cell.border)
        new_cell.fill = copy(cell.fill)
        new_cell.number_format = copy(cell.number_format)
        new_cell.protection = copy(cell.protection)
        new_cell.alignment = copy(cell.alignment)
      
wb2.save('/home/alexander/Desktop/my_file2.xlsx')
→ Ссылка