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

如何用Python 3.10.13编辑Word文档中嵌入的Excel表格?

处理Word中嵌入Excel表格的Python访问问题

为什么python-docx找不到嵌入的Excel表格

python-docx的doc.tables只能识别Word原生创建的表格,而通过Insert=>Tables=>Excel spreadsheet插入的表格是作为OLE嵌入对象存储的,不属于doc.inline_shapes或doc.tables的覆盖范围,所以你用那两种方法找不到它。

两种可行的解决办法

1. 提取嵌入Excel文件后编辑(跨平台)

Word里的嵌入Excel会被打包成二进制OLE对象,我们可以把Word当作压缩包解析,提取出这个对象,编辑后再替换回去:

import zipfile
import olefile
import io

# 打开Word文档(本质是压缩包)
with zipfile.ZipFile(complete_file_path, 'r') as zf:
    # 遍历压缩包内的嵌入文件
    for fname in zf.namelist():
        if fname.startswith('word/embeddings/') and fname.endswith('.bin'):
            # 读取OLE二进制数据
            with zf.open(fname) as f:
                ole_data = f.read()
            # 解析OLE对象,提取Excel内容
            with olefile.OleFileIO(io.BytesIO(ole_data)) as ole:
                # 定位Excel工作簿数据流
                for stream in ole.listdir():
                    if stream[0] == 'Workbook':
                        excel_bytes = ole.openstream(stream).read()
                        # 保存为临时Excel文件
                        with open('temp_edit.xlsx', 'wb') as temp_file:
                            temp_file.write(excel_bytes)
                        # 这里用openpyxl或pandas编辑temp_edit.xlsx
                        # 例:用openpyxl修改单元格
                        # from openpyxl import load_workbook
                        # wb = load_workbook('temp_edit.xlsx')
                        # ws = wb.active
                        # ws['A1'] = '新内容'
                        # wb.save('temp_edit.xlsx')
                        # ---
                        # 编辑完成后,需要把新Excel重新打包成OLE对象替换回Word
                        # 这一步需要生成OLE包,可参考olefile官方文档实现

2. 用Win32COM直接调用Office组件(Windows专属)

如果是Windows系统,直接调用Word和Excel的COM接口,能直接操作嵌入的表格:

import win32com.client as win32

# 启动Word程序
word_app = win32.gencache.EnsureDispatch('Word.Application')
word_app.Visible = True  # 显示Word窗口,方便调试
doc = word_app.Documents.Open(complete_file_path)

# 遍历所有形状,筛选OLE对象
for shape in doc.Shapes:
    if shape.Type == 12:  # 12对应OLE对象类型
        # 获取嵌入的Excel对象
        excel_obj = shape.OLEFormat.Object
        # 操作Excel工作表,比如修改A1单元格
        sheet = excel_obj.Worksheets(1)
        sheet.Range('A1').Value = '修改后的内容'
        # 关闭Excel实例,避免残留进程
        excel_obj.Application.Quit()

# 保存并关闭Word
doc.Save()
doc.Close()
word_app.Quit()

关键提示

  • python-docx不支持直接处理OLE嵌入对象,必须借助其他工具。
  • Win32COM方法需要本地安装Office,且只能在Windows上用。
  • 提取OLE的方法跨平台,但把编辑后的Excel放回Word的步骤相对复杂,需要熟悉OLE结构。

内容的提问来源于stack exchange,提问作者Andreas M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:26:08