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

Python如何向.xlsx文件嵌入.msg、PDF等格式对象?

嘿,我完全懂你的困扰——想用xlsxwriter给Excel嵌入.msg或者PDF这类对象,但它确实没有原生支持这个功能的方法,用insert_image插.msg文件肯定会报错,毕竟.msg根本不是图片格式嘛!

咱先明确:xlsxwriter是一个仅写的Excel库,核心聚焦于生成报表、图表、格式化内容这些,它并没有实现OLE对象嵌入的功能,所以这条路走不通。不过有两个靠谱的替代方案可以解决你的问题:

方案1:用openpyxl嵌入OLE对象

openpyxl是支持读写Excel的库,专门提供了插入OLE对象的API,不管是.msg还是PDF都能搞定:

  1. 先安装openpyxl:
pip install openpyxl
  1. 示例代码:
from openpyxl import Workbook
from openpyxl.drawing.ole import OLEObject

# 创建工作簿和工作表
wb = Workbook()
ws = wb.active

# 初始化OLE对象,指定要嵌入的.msg文件路径
ole_obj = OLEObject(filename="C:/object1.msg")
# 设定嵌入的单元格位置(比如G列第row行,对应你代码里的col+6)
ole_obj.anchor = f"G{row+1}"  # openpyxl用Excel单元格标识,比如G1对应第1行第7列
ws.add_ole_object(ole_obj)

# 保存文件
wb.save("embedded_report.xlsx")

方案2:Windows环境下用win32com调用Excel原生功能

如果你的代码是在Windows上运行,直接调用Excel的COM接口是最贴近原生操作的方案,能完美模拟手动插入对象的流程:

  1. 先安装pywin32:
pip install pywin32
  1. 示例代码:
import win32com.client as win32
import os

# 启动Excel后台进程
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False  # 不显示Excel窗口,后台执行

# 创建新工作簿
wb = excel.Workbooks.Add()
ws = wb.ActiveSheet

# 准备要嵌入的文件路径
file_path = os.path.abspath("C:/object1.msg")

# 调用Excel原生方法插入对象,指定位置、尺寸和显示样式
ws.Shapes.AddOLEObject(
    Filename=file_path,
    Link=False,  # 选择嵌入而非链接文件
    DisplayAsIcon=True,  # 显示为图标(和你截图里的效果一致)
    Left=ws.Columns(7).Left,  # 对应第7列(G列)的左侧位置
    Top=ws.Rows(row+1).Top,  # 对应目标行的顶部位置
    Width=100,
    Height=100
)

# 保存并关闭资源
wb.SaveAs("embedded_report_com.xlsx")
wb.Close()
excel.Quit()

这两个方案都能实现你要的嵌入效果,要是必须用xlsxwriter的话,很遗憾目前没有办法直接完成嵌入对象的需求,只能换用上面的库来实现啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:47:58