python表格单元格批注批量插图xlwings\os\pillow教程,手把手代码讲解

本文通过xlwings库和Pillow库,详细介绍了如何在Python中批量将图片插入到Excel表格的单元格作为批注。教程涵盖了设置Python环境、获取图片文件夹路径、引用Excel工作表、循环匹配图片和表格数据、调整图片批注尺寸以匹配单元格,最后展示完整代码示例。

1、常规操作import

python设置--项目--python解释器--增加软件包Pillow\xlwings

from PIL import Image
import os
import xlwings as xw

2、存放图片的文件夹地址和excel表的引用

filename = r'C:\Users\Administrator\Desktop\1234567.xlsx'  # excel表路径
img_path = 'C:/Users/Administrator/Desktop/ABC/' # 存放图片的文件夹

3、xlwings的代码块和OS的图片列表

说明:ws.range().expand().value 选中表格引用列的数据

app = xw.App(visible=True, add_book=False)
wb = app.books.open(filename)
ws = wb.sheets.active
data = ws.range('A2').expand('down').value  # 选中引用列的数据
img_list = os.listdir(img_path)  # 获取文件夹下所有图片名称(含扩展名)

4、循环图片并去掉扩展名

for i in img_list:
    img_names = i.split(".")[0]

5、循环表格数据和图片名的匹配

    for j in range(1, len(data) + 1):
        # 引用列和图片名字一样,图片地址加名字(含扩展名)
        if data[j - 1] == img_names:
            img_name = os.path.join(img_path, '%s' % i)

6、插入图片,并且和单元格大小相匹配

说明:

首先用Image加载图片;

其次用ws.range().api.前置——按清除原有批注ClearComments()、增加批注AddComment();

再次批注图形ws.range().api.Comment.Shape——Width/Height宽高设置、Fill.UserPicture()填充图片

            try:
                # 插入图片在批注,设置和批注宽高
                img = Image.open(img_name).convert('RGB')
                ws.range('A' + str(j+1)).api.ClearComments()
                ws.range('A' + str(j+1)).api.AddComment()
                ws.range('A' + str(j+1)).api.Comment.Shape.Width = 280
                ws.range('A' + str(j+1)).api.Comment.Shape.Height = 220
                ws.range('A' + str(j+1)).api.Comment.Shape.Fill.UserPicture(img_name)
            except:
                print('图片库无%s图片' % img_name)

7、保存关闭表格退excel应用

wb.save(filename)
# wb.close()
# app.quit()

8、全部代码展示

from PIL import Image
import os
import xlwings as xw
filename = r'C:\Users\Administrator\Desktop\1234567.xlsx'  # excel表路径
img_path = 'C:/Users/Administrator/Desktop/ABC/' # 存放图片的文件夹
app = xw.App(visible=True, add_book=False)
wb = app.books.open(filename)
ws = wb.sheets.active
data = ws.range('A2').expand('down').value  # 选中引用列的数据
img_list = os.listdir(img_path)  # 获取文件夹下所有图片名称(含扩展名)
for i in img_list:
    img_names = i.split(".")[0]
    for j in range(1, len(data) + 1):
        # 引用列和图片名字一样,图片地址加名字(含扩展名)
        if data[j - 1] == img_names:
            img_name = os.path.join(img_path, '%s' % i)
            try:
                # 插入图片在A列批注,设置和批注宽高
                img = Image.open(img_name).convert('RGB')
                ws.range('A' + str(j+1)).api.ClearComments()
                ws.range('A' + str(j+1)).api.AddComment()
                ws.range('A' + str(j+1)).api.Comment.Shape.Width = 280
                ws.range('A' + str(j+1)).api.Comment.Shape.Height = 220
                ws.range('A' + str(j+1)).api.Comment.Shape.Fill.UserPicture(img_name)
            except:
                print('图片库无%s图片' % img_name)
wb.save(filename)
# wb.close()
# app.quit()

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值