使用pandas.to_excel()后用xlsxwriter向Excel插入图片失败的问题
问题解答
你的猜测不对,to_excel()执行后工作表完全可以继续修改,操作失败大概率是代码逻辑有误,而非工作表被锁定。
正确的操作流程
你不需要手动逐单元格写入DataFrame,用to_excel()写入后依然可以插入图片,关键是要正确获取xlsxwriter原生的工作表对象,并在最后保存文件。以下是完整示例:
import pandas as pd # 构造测试数据 df = pd.DataFrame({ '名称': ['商品A', '商品B', '商品C'], '销量': [120, 80, 150] }) # 初始化ExcelWriter,指定xlsxwriter引擎 writer = pd.ExcelWriter('带图片的报表.xlsx', engine='xlsxwriter') # 将DataFrame写入工作表 df.to_excel(writer, sheet_name='销售数据', index=False) # 获取xlsxwriter的工作表对象 # 两种方式都可以:直接从writer.sheets取,或者通过writer.book获取 worksheet = writer.sheets['销售数据'] # 或者 worksheet = writer.book.get_worksheet_by_name('销售数据') # 在指定单元格插入图片(参数:单元格位置,图片路径) worksheet.insert_image('D2', '产品宣传图.png') # 必须调用save()才能将所有修改写入文件 writer.save()
常见失败原因
- 获取了错误的工作表对象:如果你误拿了pandas封装的对象而非xlsxwriter原生工作表,调用
insert_image()会报错。一定要通过writer.sheets[sheet_name]或writer.book.get_worksheet_by_name()获取正确对象。 - 忘记调用
writer.save():所有对工作表的修改(包括插入图片)都需要通过save()方法最终写入文件,否则不会生效。 - 图片路径错误:确保
insert_image()的第二个参数是正确的图片绝对路径或相对路径,找不到图片也会导致操作失败。
简单说,to_excel()只是把DataFrame的数据写入工作表,并没有“完成写入锁定”,只要在save()之前,都可以对工作表做任何xlsxwriter支持的操作。
内容的提问来源于stack exchange,提问作者cjbarth
相关产品推荐
相关产品推荐

