[英]copy cell style openpyxl
我試圖將工作表default_sheet
復制到同一工作簿中的新工作表new_sheet
。
我設法創建了一個新工作表並從默認工作表復制值。 如何將每個單元格的樣式復制到new_sheet單元格中?
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>
我目前正在使用openpyxl 1.8.2,但我想切換到1.8.5。
一個解決方案是復制:
from copy import copy, deepcopy
new_sheet._styles[cell.get_coordinate()] = copy(
default_sheet._styles[cell.get_coordinate()])
從openpyxl 2.5.4開始,python 3.4 :(對下面的舊版本進行細微更改)
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)
對於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
StyleableObject
實現將樣式存儲在單個列表中,單元格上的_style
和樣式屬性實際上是此數組的getter和setter。 你可以單獨為每個樣式實現副本,但這會很慢,特別是如果你像我一樣在繁忙的內循環中進行。
如果您願意深入了解私有類屬性,則可以更快速地克隆樣式:
if cell.has_style:
new_cell._style = copy(cell._style)
FWIW這是優化的WorksheetCopy
類在_copy_cells
方法中_copy_cells
方式。
可能這是大多數人的便捷方式。
from openpyxl import load_workbook
from openpyxl import Workbook
read_from = load_workbook('path/to/file.xlsx')
read_sheet = read_from.active
write_to = Workbook()
write_sheet = write_to.active
write_sheet['A1'] = read_sheet['A1'].value
write_sheet['A1'].style = read_sheet['A1'].style
write_to.save('save/to/file.xlsx')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.