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

求助:如何用xlrd或openpyxl向xlsxwriter复制外部Excel工作表

如何用OpenPyXL复制工作表到XlsxWriter生成的报表中

首先直接给结论:你应该用OpenPyXL,而非xlrd——xlrd是侧重只读的库,对工作表复制、写入的支持非常有限,OpenPyXL兼具读写能力,更适配你的场景。

你的代码为什么失效?

你之前的写法存在两个核心问题:

  1. 直接执行worksheet_cover = cover_template只是做了对象引用,并没有把模板工作表的内容实际复制到XlsxWriter创建的工作表中;
  2. XlsxWriter和OpenPyXL是完全独立的库,它们的工作表对象不兼容,无法直接赋值转换。而且XlsxWriter是只写型库,本身不支持读取或导入其他库的工作表对象。

正确的实现方案

要达成需求,你需要用OpenPyXL读取模板工作表的内容与格式,再用XlsxWriter逐单元格将这些内容写入新报表的目标工作表。下面是具体的代码示例:

import xlsxwriter
from openpyxl import load_workbook

# 1. 用XlsxWriter初始化你的报表工作簿
report_workbook = xlsxwriter.Workbook('final_report.xlsx')
# 添加用于复制模板内容的Cover工作表
cover_sheet = report_workbook.add_worksheet("Cover")

# 2. 用OpenPyXL加载模板文件并获取目标工作表
template_workbook = load_workbook('Test_template.xlsx')
template_cover = template_workbook['Cover']  # 推荐用此写法,替代已弃用的get_sheet_by_name

# 3. 遍历模板工作表的所有单元格,复制内容到XlsxWriter工作表
for row_idx, row in enumerate(template_cover.iter_rows(values_only=True)):
    for col_idx, cell_value in enumerate(row):
        # 逐单元格写入值
        cover_sheet.write(row_idx, col_idx, cell_value)

# 4. (可选)复制单元格格式(需手动映射,因两个库格式API不同)
# 示例:给第一行标题设置加粗、大号字体格式
header_format = report_workbook.add_format({'bold': True, 'font_size': 14})
for col_idx, cell in enumerate(template_cover[1]):
    cover_sheet.write(0, col_idx, cell.value, header_format)

# 务必关闭工作簿以保存内容
report_workbook.close()

关键注意事项

  • 格式复制的局限性:XlsxWriter和OpenPyXL的格式系统差异较大,若需复制复杂格式(如单元格背景色、边框、对齐方式),需要手动转换对应参数。比如OpenPyXL的cell.fill.bgColor要转换成XlsxWriter的{'bg_color': 'XXXXXX'}格式。
  • 复杂元素处理:如果模板包含图表、图片或合并单元格,这些元素无法直接复制,你需要在XlsxWriter中重新创建,或者先通过OpenPyXL将模板工作表合并到新文件,再用XlsxWriter追加其他报表内容。
  • 性能优化:若工作表数据量较大,使用iter_rows(values_only=True)可以提升读取效率,避免加载不必要的单元格对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:19:33