Как копировать строки таблицы, сохраняя исходный размер и форматирование?
У меня есть код для копирования строк таблицы без сохранения прежних размеров, выделений полужирным цветом,размеров шрифта,т.е. оригинального стиля(формата) с помощью библиотеки 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')