在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,结束。