python 复制 excel 并在文档中保留完全相同的参数(样式、单元格大小和融合、边框...)

问题描述 投票:0回答:1

我正在寻找一种在其他文件中复制和Excel的方法。我有一个“file_1.xlsx”,但我想要一个不存在的“file_1_copy.xlsx”。副本必须与原始文件完全相同,这意味着单元格大小、它们的融合、单元格中文本的颜色、背景、如果有边框,就好像我用右键单击。

我有:

import openpyxl
from openpyxl.styles import Font

wb = openpyxl.load_workbook('test excel.xlsx')
ws = wb.active

new_wb = openpyxl.Workbook()
new_ws = new_wb.active

for row in ws.iter_rows():
    for cell in row:
        new_cell = new_ws.cell(row=cell.row, column=cell.col_idx, value=cell.value)
        if cell.has_style:
            new_cell.font = Font(name=cell.font.name, size=cell.font.size, bold=cell.font.bold, italic=cell.font.italic, color=cell.font.color)

new_wb.save('test copie excel.xlsx')

enter image description here

所以在图像上,左边是原始文件。副本位于右侧,但第一个单元格中的文本应该有两种颜色:右侧和蓝色,并以黄色突出显示。或者在副本中,我只有一种颜色,所有文本都变成红色,并且不再过亮。 是否存在一种简单的方法来复制 Excel,就好像通过右键单击手动完成一样,这将准确复制原始文件及其内部的所有属性/元素?

python excel attributes copy styles
1个回答
0
投票

Excel 单元格通常只有一种字体。如果 Excel 单元格中存在富文本格式的文本,则单元格内容本身就是富文本单元格内容。但出于性能原因,默认情况下加载工作簿文件时不会读取富文本单元格内容。因此,如果需要,必须在

rich_text=True
中设置
load_workbook('test excel.xlsx', rich_text=True)

颜色是单元格的填充颜色。为了保持这一点,还必须复制填充。

顺便说一句:

copy
中的
copy
可用于复制整个
cell.font
cell.fill
,以避免复制每个单个字体和填充属性。

并且列宽是工作表尺寸设置,如果要相同,也需要为

new_ws
设置。

from openpyxl import load_workbook, Workbook
from copy import copy

wb = load_workbook('test excel.xlsx', rich_text=True)
ws = wb.active

new_wb = Workbook()
new_ws = new_wb.active

for row in ws.iter_rows():
    for cell in row:
        new_cell = new_ws.cell(row=cell.row, column=cell.col_idx, value=cell.value)
        new_cell.font = copy(cell.font)
        new_cell.fill = copy(cell.fill)

for column_name in ws.column_dimensions:
    new_ws.column_dimensions[column_name].width = ws.column_dimensions[column_name].width
            
new_wb.save('test copie excel.xlsx')

这适用于您现在拥有的单元格和工作表属性。如果需要复制所有可能的单元格和工作表属性,那么代码会变得非常长且复杂。

但是使用另一种方法不是更方便吗? 使用

test excel.xlsx
打开
wb = openpyxl.load_workbook('test excel.xlsx', rich_text=True)
。然后在
wb
中进行所需的更改。最后使用
wb.save('test copie excel.xlsx')
以新文件名保存文件。根本不需要
new_wb
和 new_ws`。

© www.soinside.com 2019 - 2024. All rights reserved.