You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的openpyxl库从另一个工作簿复制工作表?

解决openpyxl复制工作表内容到另一工作簿的问题

错误原因

你尝试的wb1[sheet]=wb2写法无效,因为openpyxl的Workbook对象不支持通过__setitem__直接赋值或替换工作表,因此触发AttributeError: __setitem__。

正确解决方案

方法1:仅复制单元格值(简单高效)

如果只需要复制数据内容,无需保留样式、格式,可采用逐行追加的方式:

import openpyxl

# 加载wb1并创建新工作表
wb1 = openpyxl.load_workbook(path_full_file)
sheet_name = 'current_date'
wb1.create_sheet(sheet_name, 0)
wb1_sheet = wb1[sheet_name]

# 正确加载wb2的工作表
wb2_workbook = openpyxl.load_workbook(path_to)
wb2_sheet = wb2_workbook.active

# 逐行复制值
for row in wb2_sheet.iter_rows(values_only=True):
    wb1_sheet.append(row)

# 保存修改后的wb1
wb1.save(path_full_file)

方法2:复制值+样式/格式(完整复制)

如果需要保留单元格的字体、填充、对齐方式、数字格式等样式,需遍历每个单元格并复制相关属性,注意导入copy模块复制样式对象(避免引用同一对象导致样式混乱):

import openpyxl
from copy import copy

# 加载wb1并创建新工作表
wb1 = openpyxl.load_workbook(path_full_file)
sheet_name = 'current_date'
wb1.create_sheet(sheet_name, 0)
wb1_sheet = wb1[sheet_name]

# 正确加载wb2的工作表
wb2_workbook = openpyxl.load_workbook(path_to)
wb2_sheet = wb2_workbook.active

# 遍历所有单元格,复制值和样式
for row in wb2_sheet.iter_rows(values_only=False):
    for cell in row:
        # 复制单元格值
        wb1_sheet[cell.coordinate].value = cell.value
        # 复制样式属性
        wb1_sheet[cell.coordinate].font = copy(cell.font)
        wb1_sheet[cell.coordinate].fill = copy(cell.fill)
        wb1_sheet[cell.coordinate].border = copy(cell.border)
        wb1_sheet[cell.coordinate].alignment = copy(cell.alignment)
        wb1_sheet[cell.coordinate].number_format = cell.number_format

# 保存修改后的wb1
wb1.save(path_full_file)

注意事项

  • 加载工作簿时,若需读取公式计算后的结果而非公式本身,可添加data_only=True参数,例如openpyxl.load_workbook(path_to, data_only=True)。
  • 保存工作簿前确保原文件已关闭,避免权限错误。

内容的提问来源于stack exchange,提问作者Anastasia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 10:42:23