python xlsx 图片_实例11:用Python给Excel所有工作表添加图片

我们在实例9里面展示了如何批量填写每日出货清单,每一天的清单都是直接复制“出货单模板”,然后在其中填入出货产品信息的。openpyxl有一个问题,就是在复制工作表的时候,无法跟着复制图片。而我们的公司名一般比较个性化,在Excel中用文字很难达到那个效果,比如如下:

此时,我们就需要使用到openpyxl模块的图片插入功能。但这个功能有一个坑,我们下面来展开说明。

按照openpyxl的官方文档,添加图片只需如下几步:

from openpyxl.drawing.image import Image #导入图片添加模块

from openpyxl import load_workbook #导入Excel工作表操作模块

img = Image('images\company.png') #需添加的图片所在路径

wb=load_workbook('data\出货单.xlsx') #打开工作簿

ws=wb[sheet_name] #获取工作表

ws.add_image(img,'A1') #添加图片到指定的单元格

wb.save('data\出货单_new.xlsx') #保存文件

下面我们就按照以上说明来操作,看看效果怎么样。

from openpyxl.drawing.image import Image

from openpyxl import load_workbook

img = Image('images\company.png') #需添加的图片所在路径

wb = load_workbook("data\出货单.xlsx") #打开工作簿

sheet_names=wb.get_sheet_names() #获得工作簿的所有工作表名

for sheet_name in sheet_names: #遍历每个工作表,并在每个工作表的A1单元格插入图片

ws=wb[sheet_name]

ws.add_image(img, 'A1')#添加图片到指定的A1单元格,图片左上角将与A1单元格左上角对齐

wb.save('data\出货单—new.xlsx')

我们通过遍历“出货单.xlsx”文件中的所有工作表,然后每个工作表都在A1单元格插入我们设定好的图片,最后保存。待程序执行完成,打开保存的文件“出货单—new.xlsx”,报出如下错误:

我们选择“是”,继续下一步,再报出错误:

点击“关闭”,继续下一步。我们发现除了最后一个工作表“12-23”,其他工作表图片全部无法正常显示,都带有一个红色的“X”,显示为“无法显示该图片”。

我花了很多时间来研究到底怎么回事,然后也做了很多测试。最后发现,每插入一张图片就需要保存一下,才可保证图片正常显示。因此将程序稍作修改如下。即每给一个工作表插入图片后,都保存一次,而不是给所有工作表插完图片后,最后才来保存。相当于我们不停地打开“出货单.xlsx”,然后在其中的各个工作表依次插入图片,每操作一次,保存一次。时间会比只保存一次更长,但毕竟比手动插入图片快很多了。最终,每张工作表都插入图片成功,呲牙...

from openpyxl.drawing.image import Image

img = Image('images\company.png')

wb = load_workbook("data\出货单.xlsx")

sheet_names=wb.get_sheet_names()

for sheet_name in sheet_names:

wb = load_workbook("data\出货单.xlsx")

ws=wb[sheet_name]

ws.add_image(img, 'A1')

wb.save('data\出货单.xlsx')

所有源代码和说明都在Jupyter notebook上完成,所用到的Excel 资料已上传GitHub, 欢迎Fork或下载到本地随意玩。。。转载请注明出处,谢谢。

GitHub链接:https://github.com/weidylan/Office_Automation_by_Using_Python

微信公众号:Python操作Office软件高效工作

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值