You need to enable JavaScript to run this app. 如何将其他Excel含数据与公式的工作表导入xlsxwriter目标文件
优惠活动
大模型
产品
解决方案
定价
更多

如何将其他Excel含数据与公式的工作表导入xlsxwriter目标文件

问题根因说明

两个核心设计特性直接导致了你当前遇到的异常:

  • xlsxwriter 是纯写入导向的 Excel 操作库,不存在读取、修改已有 Excel 文件的能力,设计上仅支持从零创建新文件。执行 xlsxwriter.Workbook('Holdres.xlsx') 时,只要路径对应的文件已存在,就会直接清空原文件的全部内容,不会保留任何原有数据——你手动粘贴到Holdres.xlsx里的工作表内容,自然会在代码运行时被完全抹除,最终只剩你新建的空白Foreign_holders工作表。
  • 依赖手动粘贴工作表的操作本身和当前的代码逻辑完全冲突,只要代码执行实例化xlsxwriter的步骤,之前手动存入文件的所有内容都会被覆盖,不存在保留的可能。
正确实现方案
  • 抛弃“先手动把Holdres2的工作表粘到Holdres.xlsx,再跑代码生成空表”的思路,整个跨文件导入流程全部通过代码完成,避免手动操作被代码清空。
  • 实现步骤拆分:
    1. 使用支持读取xlsx格式、可保留公式内容的库(如openpyxl)加载Holdres2.xlsx,加载时将data_only参数设为False,确保能读到单元格内的原始公式(而非公式计算后的静态值),同步记录单元格格式、列宽行高等属性。
    2. 确认所有待导入的工作表内容读取完成后,再实例化xlsxwriter的Workbook对象创建新的Holdres.xlsx文件,不要在代码最开头就执行实例化操作(避免提前清空目标路径文件)。
    3. 逐单元格将读取到的源工作表内容写入xlsxwriter的对应工作表:遇到普通值直接用write()方法写入,遇到带公式的单元格用write_formula()方法写入,避免公式被当成普通静态文本处理。
    4. 在导入内容全部写入完成后,再执行你原本的create_sheet函数,创建Foreign_holders工作表并写入对应内容,最后保存工作簿即可。
  • 参考核心代码片段:
import xlsxwriter
from openpyxl import load_workbook

SHEET_NAME = 'Foreign_holders'
# 先做源文件读取,不要提前实例化xlsxwriter
src_wb = load_workbook('Holdres2.xlsx', data_only=False)
src_sheet = src_wb['需要导入的源工作表名']

# 等读取完成后再初始化工作簿,此时才会创建/清空目标文件
workbook = xlsxwriter.Workbook('Holdres.xlsx')
# 先创建导入用的工作表,写入读取到的内容
import_sheet = workbook.add_worksheet(name='导入的工作表名')
# 逐行写入源表内容(包含公式)
for row_idx, row in enumerate(src_sheet.iter_rows()):
    for col_idx, cell in enumerate(row):
        if str(cell.data_type) == 'f': # 判断是公式类型
            import_sheet.write_formula(row_idx, col_idx, cell.value)
        else:
            import_sheet.write(row_idx, col_idx, cell.value)

def create_sheet(workbook):
   worksheet = workbook.add_worksheet(name=SHEET_NAME)
   # 后续写入Foreign_holders表的业务逻辑

# 执行新建目标工作表逻辑
create_sheet(workbook)
# 最后保存文件
workbook.close()
常见注意坑点
  • 不要把xlsxwriter的Workbook实例化语句写在代码最开头,这个操作会立刻清空目标路径下的文件,哪怕你之前已经通过其他方式往文件里写入了内容,也会被完全清除。
  • 从源文件读取公式时一定要确保data_only=False,如果设为True,读到的会是上次Excel打开文件时缓存的公式计算结果,会丢失原始公式,不符合你的导入要求。
  • 用xlsxwriter写公式时,不要直接用普通write()方法写带=的公式字符串,Excel打开时不会对这类字符串做公式计算,必须用write_formula()方法写入,才能保证公式生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 09:06:04