python自动化——对word的指定位置放入图片

在word中插入N行3列的图片,并在相对的位置放入对应名称

首先是python-docx中的函数

#在word中添加指定图片
add_picture(image_path_or_stream, width=None, height=None)

add_picture只能添加一行一张图片,所以没办法满足需求。然后通过面向百度编程,触类旁通,看到VBA有类似的处理方法,先在word文档中插入指定的N行3列的表格

#插入N行3列表格
doc.add_table(rows, cols, style=None)

然后再对其定位,传入照片和照片名称

大体思路如上,然后代码处理如下:

第一步是获得俩个list,分别是照片地址和照片名称

path = r"自己照片路径"
# names=os.listdir(path)#列表中的为要读取文件的路径
def new_report(test_report):
    lists = os.listdir(test_report)         # 列出目录的下所有文件和文件夹保存到lists
    lists.sort(key=lambda fn: os.path.getctime(test_report + "/" + fn)) # 按时间排序
#     file_new = os.path.join(test_report, lists[-1])      # 获取最新的文件保存到file_new
#     print(file_new)
#    print(test_report+"/"+fn)
    names=lists
    return names
names=new_report(path)
allxls=[]
label=[]
for name in names:
    a=r'C:'+name
    allxls.append(a)
    label.append(name)
print(allxls[:5])

第二步就是定位传入照片和名称

doc = Document()
tables=doc.add_table(rows=4,cols=3)
num=math.ceil(len(allxls)/3)
for x in range(num*2):
    if x%2==0:
        for i in range(3):  
            run=tables.cell(x, i).paragraphs[0].add_run()
            try:
                run.add_picture(allxls[int(i+(x/2)*3)],width=Inches(2),height=Inches(2.5))  
            except IndexError:
                continue 
            except Exception:
                jpg_ima = Image.open(allxls[int(i+(x/2)*3)])
                jpg_ima.save(label[int(i+(x/2)*3)].split("\\")[-1])
                run.add_picture(allxls[int(i+(x/2)*3)].split("\\")[-1],width=Inches(2),height=Inches(2.5))            
   
    else:
        for i in range(3):
            try:
                tables.cell(x,i).text = label[i+int(x/2)*3]
            except:
                continue
doc.save('1.docx')

感觉整体最难的居然是找这个定位坐标的数学逻辑,体育老师表示心累。

OK,结束。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值