我正在寻找一种在其他文件中复制和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')
所以在图像上,左侧是原始文件。副本位于右侧,但第一个单元格中的文本应该有两种颜色:右侧和蓝色,并以黄色突出显示。或者在副本中,我只有一种颜色,所有文本都变成红色,并且不再过亮。 是否存在一种简单的方法来复制 Excel,就好像通过右键单击手动完成一样,这将准确复制原始文件及其内部的所有属性/元素?
你几乎已经掌握了使用
openpyxl
库复制 Excel 文件的关键要素,但还需要一些步骤才能完全保留样式、单元格大小和合并。
以下是更完善的代码版本,它处理了更多样式和结构方面的内容:
import openpyxl
from copy import copy
def copy_excel_with_full_format(source_file, target_file):
"""
使用 openpyxl 复制 Excel 文件,保留所有样式、单元格大小和合并。
Args:
source_file (str): 源 Excel 文件的路径。
target_file (str): 目标 Excel 文件的路径。
"""
wb = openpyxl.load_workbook(source_file)
new_wb = openpyxl.Workbook()
new_wb.remove(new_wb.active) # 删除默认工作表
for sheet in wb:
new_sheet = new_wb.create_sheet(sheet.title)
# 复制单元格内容和样式
for row in sheet.iter_rows():
for cell in row:
new_cell = new_sheet.cell(row=cell.row, column=cell.column, value=cell.value)
if cell.has_style:
new_cell._style = copy(cell._style) # 复制所有样式属性
# 复制行高和列宽
for i, row in enumerate(sheet.iter_rows()):
new_sheet.row_dimensions[i + 1].height = sheet.row_dimensions[i + 1].height
for i, col in enumerate(sheet.iter_cols()):
new_sheet.column_dimensions[col[0].column_letter].width = sheet.column_dimensions[col[0].column_letter].width
# 复制合并单元格
for ranges in sheet.merged_cells.ranges:
new_sheet.merge_cells(str(ranges))
new_wb.save(target_file)
# 使用方法
copy_excel_with_full_format("test excel.xlsx", "test copie excel.xlsx")
这段代码做了以下改进:
-
复制所有样式属性:
使用
copy(cell._style)
直接复制所有样式属性,包括颜色、边框、对齐方式等,而不是逐个复制。 - 复制行高和列宽: 迭代所有行和列,并将它们的高度和宽度复制到新工作表中。
-
复制合并单元格:
使用
sheet.merged_cells.ranges
获取源工作表中所有合并单元格的范围,并使用new_sheet.merge_cells()
在新工作表中创建相同的合并单元格。
通过这些改进,你的 Excel 文件副本现在应该与原始文件完全相同,包括所有样式、单元格大小和合并单元格。
标签:python,excel,attributes,copy,styles From: 78772527