copy cell style openpyxl
openpyxl, python
Solution
As of openpyxl 2.5.4, python 3.4: (subtle changes over the older version below)
new_sheet = workbook.create_sheet(sheetName)
default_sheet = workbook['default']
from copy import copy
for row in default_sheet.rows:
for cell in row:
new_cell = new_sheet.cell(row=cell.row, column=cell.col_idx,
value= cell.value)
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)
For openpyxl 2.1
new_sheet = workbook.create_sheet(sheetName)
default_sheet = workbook['default']
for row in default_sheet.rows:
for cell in row:
new_cell = new_sheet.cell(row=cell.row_idx,
col=cell.col_idx, value= cell.value)
if cell.has_style:
new_cell.font = cell.font
new_cell.border = cell.border
new_cell.fill = cell.fill
new_cell.number_format = cell.number_format
new_cell.protection = cell.protection
new_cell.alignment = cell.alignment
Problem
I am trying to copy a sheet, `default_sheet`, into a new sheet `new_sheet` in the same workbook. I did managed to create a new sheet and to copy the values from default sheet. How can I also copy the style of each cell into the new_sheet cells? ``` new_sheet = workbook.create_sheet() new_sheet.title = sheetName default_sheet = workbook.get_sheet_by_name('default') new_sheet = workbook.get_sheet_by_name(sheetName) for row in default_sheet.rows: col_idx = float(default_sheet.get_highest_column()) starting_col = chr(65 + int(col_idx)) for row in default_sheet.rows: for cell in row: new_sheet[cell.get_coordinate()] = cell.value <copy also style of each cell> ``` I am at the moment using openpyxl 1.8.2, but i have in mind to switch to 1.8.5. One solution is with copy: ``` from copy import copy, deepcopy new_sheet._styles[cell.get_coordinate()] = copy( default_sheet._styles[cell.get_coordinate()]) ```