Python3,区区10行代码,批量把图片插入Excel指定单元格中,省下时间去烫头发。

举报
Carl_奕然 发表于 2023/03/06 15:06:02 2023/03/06
【摘要】 批量把图片插入到excel中,这段代码,只能说YYDS

1、引言


小云:鱼哥, 想请教你个问题。
小鱼:啥问题呢?
小云:我想把图片插入到excel里面
小鱼:这个还用问我? 你是昨晚喝多了?
小云:不是的,我是想把图片插入到excel单元格里面
小鱼:这么简单的操作,你竟然也说得出口!
小云:不是的,我是想批量插入图片
小鱼:excel不支持批量插入图片功能??
小云:是的,我想把图片批量按照名称和统一尺寸,放入到单元格里面
小鱼:昂… 这个 excel也能批量操作啊。
小云:太费劲了, 我有100多张图片, 我还得手动调单元格的大小,
小鱼:那确实挺多的, 那你就慢慢搞一下了,闲着也是闲着…
小云:鱼哥,别啊,节省的时间,去泡个澡,剪个头发,不舒服吗?
小鱼:也对,不过现在剪头发都是198了…
小云:没事鱼哥, 我有券…
小鱼:那… 等我会啊…


2、代码实战


2.1 代码示例

代码示例

# -*- coding: utf-8 -*-
# @Time   : 2022-12-05
# @Author : Carl_DJ

'''
实现功能:
    在excel中,对应的名称后面,插入图片

'''

import openpyxl,PIL
from openpyxl.drawing.image import Image
import os

#excel文件路径
excel_path = './pic/image.xlsx'

#图片名称为A列
img_name_column = 'A'

#图片写入B列
img_column = 'B'
#读取图片的地址
img_path = './data/picture'

#转换图片格式,强制转换成jpg格式
# img_type = PIL.Image.open(img_path).convert("RGB")
# img_type.save(img_path, 'jpeg')

#打开excel文件
wb = openpyxl.load_workbook(excel_path)
#获取sheet页
ws = wb.active

for i, v in enumerate(ws[img_name_column], start=1):
    #图片路径
    img_file_path = os.path.join(img_path, f"{v.value}.jpg")
    #获取图片
    img = Image(img_file_path)
    #设置图片的大小
    img.width, img.height = (110, 110)
    # 设置表格的宽20和高85
    ws.column_dimensions[img_column].width = 20
    ws.row_dimensions[i].height = 85
    # 图片插入名称对应单元格
    ws.add_image(img, anchor=img_column + str(i))

#保存
wb.save(excel_path)  # 保存
#关闭
wb.close()
print(f'保存完成')


运行结果


2.2 遇到问题及处理方案


2.2.1 遇到问题


这里,小鱼在运行脚本时, 遇到一个错误提示,
图片的类型是 “.webp”,如下:

我首先看图片的后缀,是不是.webp,发现,已修改为.jpg

于是,小鱼就想到了,是不是下载图片的时候, 虽然图片的后缀改成.jpg,但是,图片的本质,还是**.webp**格式,
为了验证小鱼的猜想,我就重新下载一次百度图片,如下:

确实,是这样的。

2.2.2 解决方案


遇到这种问题,两种解决方案:

1、直接下载jgp格式的图片;
可以参照小鱼的这篇《Python3,5行代码,让你拥有无限量壁纸美图》 ,这样下载的都是jpg格式的图片。

2、代码强制转换:

强制转换图片格式:

#转换图片格式,强制转换成jpeg格式
img_type = PIL.Image.open(img_path).convert("RGB")
img_type.save(img_path, 'jpeg')


3、总结


看到这里,今天的分享就差不多结束了。
在2022年初的时候, 小鱼把图片写入到excel里面,得到的反馈很不错。


今天,在2023年的年初 ,我们把图片插入到单元格中,可算是把图片与excel玩的明明白白的。
当然,
关于python的更多更有趣的知识, 可以关注小鱼的 Python专栏。
我是奕然:

  • CSDN 博客专家;
  • 阿里云社区 专家博主;
  • 51CTO博客专家;
  • 51 认证讲师;
  • 企业金牌面试官;

关注我,带你学习更多更有趣的Python知识。




【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。