Python如何向.xlsx文件嵌入.msg、PDF等格式对象?
嘿,我完全懂你的困扰——想用xlsxwriter给Excel嵌入.msg或者PDF这类对象,但它确实没有原生支持这个功能的方法,用insert_image插.msg文件肯定会报错,毕竟.msg根本不是图片格式嘛!
咱先明确:xlsxwriter是一个仅写的Excel库,核心聚焦于生成报表、图表、格式化内容这些,它并没有实现OLE对象嵌入的功能,所以这条路走不通。不过有两个靠谱的替代方案可以解决你的问题:
方案1:用openpyxl嵌入OLE对象
openpyxl是支持读写Excel的库,专门提供了插入OLE对象的API,不管是.msg还是PDF都能搞定:
- 先安装openpyxl:
pip install openpyxl
- 示例代码:
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接口是最贴近原生操作的方案,能完美模拟手动插入对象的流程:
- 先安装pywin32:
pip install pywin32
- 示例代码:
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
相关产品推荐
相关产品推荐

