python表格单元格批注批量插图xlwingsospillow教程,手把手代码讲解

python表格单元格批注批量插图xlwingsospillow教程,手把手代码讲解,第1张

1、常规 *** 作import

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

from PIL import Image
import os
import xlwings as xw

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

filename = r'C:\Users\Administrator\Desktop34567.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\Desktop34567.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()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/798717.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存