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()])
To change a style property of a cell, first you either have to copy the existing style object from the cell and change the value of the property or you have to create a new style object with the desired settings. Then, assign the new style object to the cell.
Is openpyxl safe to use? The python package openpyxl was scanned for known vulnerabilities and missing license, and no issues were found. Thus the package was deemed as safe to use. See the full health analysis review.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With