Python xlwings插入Excel图片的实现方法
测试图片
一、相对路径(报错)
使用相对路径插入会报错(确认路径正确无误)
importxlwingsasxw wb=xw.Book() sht=wb.sheets['Sheet1'] sht.pictures.add('1.jpg')#使用相对路径会报错 wb.save('test.xlsx') wb.close()
File"
>",line5,inAddPicture
pywintypes.com_error:(-2147352567,'发生意外。',(0,None,'未找到指定文件。',None,0,-2146827284),None)
二、绝对路径
改为绝对路径即可成功插入
importos importxlwingsasxw wb=xw.Book() sht=wb.sheets['Sheet1'] #sht.pictures.add('1.jpg')#使用相对路径会报错 sht.pictures.add(os.path.join(os.getcwd(),'1.jpg')) wb.save('test.xlsx') wb.close()
三、指定位置和大小
函数原型add(image,link_to_file=False,save_with_document=True,left=0,top=0,width=None,height=None,name=None,update=False)
importos importxlwingsasxw wb=xw.Book() sht=wb.sheets['Sheet1'] fileName=os.path.join(os.getcwd(),'1.jpg') sht.pictures.add(fileName,left=sht.range('B5').left,top=sht.range('B5').top,width=100,height=100) wb.save('test.xlsx') wb.close()
指定图片位置为B5单元格的左上角,图片像素为100×100
四、居中插入
新建Excel文件test.xlsx,设置列宽20行高100
importos importxlwingsasxw wb=xw.Book('test.xlsx')#打开已存在的Excel文件 sht=wb.sheets['Sheet1'] rng=sht.range('B2')#目标单元格 fileName=os.path.join(os.getcwd(),'1.jpg') width,height=80,80#指定图片大小 left=rng.left+(rng.width-width)/2#居中 top=rng.top+(rng.height-height)/2 sht.pictures.add(fileName,left=left,top=top,width=width,height=height) wb.save() wb.close()
智能居中插入
1.jpg
宽×高=188×282
2.jpg
宽×高=200×153
importos importxlwingsasxw fromPILimportImage defadd_center(sht,target,filePath,match=False,width=None,height=None,column_width=None,row_height=None): '''Excel智能居中插入图片 优先级:match>width&height>column_width&row_height 建议使用column_width或row_height,定义单元格最大宽或高 :paramsht:工作表 :paramtarget:目标单元格,字符串,如'A1' :paramfilePath:图片绝对路径 :paramwidth:图片宽度 :paramheight:图片高度 :paramcolumn_width:单元格最大宽度,默认100像素,0<=column_width<=1557.285 :paramrow_height:单元格最大高度,默认75像素,0<=row_height<=409.5 :parammatch:绝对匹配原图宽高,最大宽度1557.285,最大高度409.5 ''' unit_width=6.107#Excel默认列宽与像素的比 rng=sht.range(target)#目标单元格 name=os.path.basename(filePath)#文件名 _width,_height=Image.open(filePath).size#原图片宽高 NOT_SET=True#未设置单元格宽高 #match ifmatch:#绝对匹配图像 width,height=_width,_height else:#不绝对匹配图像 #width&height ifwidthorheight: ifnotheight:#指定了宽,等比计算高 height=width/_width*_height ifnotwidth:#指定了高,等比计算宽 width=height/_height*_width else: #column_width&row_height ifcolumn_widthandrow_height:#同时指定单元格最大宽高 width=row_height/_height*_width#根据单元格最大高度假设宽 height=column_width/_width*_height#根据单元格最大宽度假设高 area_width=column_width*height#假设宽优先的面积 area_height=row_height*width#假设高优先的面积 ifarea_width>area_height: width=column_width else: height=row_height elifnotcolumn_widthandnotrow_height:#均无指定单元格最大宽高 column_width=100 row_height=75 rng.column_width=column_width/unit_width#更新当前宽度 rng.row_height=row_height#更新当前高度 NOT_SET=False width=row_height/_height*_width#根据单元格最大高度假设宽 height=column_width/_width*_height#根据单元格最大宽度假设高 area_width=column_width*height#假设宽优先的面积 area_height=row_height*width#假设高优先的面积 ifarea_width>area_height: height=row_height else: width=column_width else: width=row_height/_height*_widthifrow_heightelsecolumn_width#仅设了单元格最大宽度 height=column_width/_width*_heightifcolumn_widthelserow_height#仅设了单元格最大高度 assert0<=width/unit_width<=255 assert0<=height<=409.5 ifNOT_SET: rng.column_width=width/unit_width#更新当前宽度 rng.row_height=height#更新当前高度 left=rng.left+(rng.width-width)/2#居中 top=rng.top+(rng.height-height)/2 try: sht.pictures.add(filePath,left=left,top=top,width=width,height=height,scale=None,name=name) exceptException:#已有同名图片,采用默认命名 pass if__name__=='__main__': wb=xw.Book() sht=wb.sheets['Sheet1'] filePath=os.path.join(os.getcwd(),'1.jpg') filePath2=os.path.join(os.getcwd(),'2.jpg') add_center(sht,'A1',filePath)#默认值 add_center(sht,'B2',filePath2)#默认值 add_center(sht,'C3',filePath,match=True)#绝对匹配图片宽高 add_center(sht,'D4',filePath,width=100)#图片宽度为100像素 add_center(sht,'E5',filePath,height=100)#图片高度为100像素 add_center(sht,'F6',filePath,width=100,height=100)#图片高度为100像素 add_center(sht,'G7',filePath,column_width=100)#单元格最大宽度为100像素 add_center(sht,'H8',filePath,row_height=100)#单元格最大宽度为100像素 add_center(sht,'I9',filePath,column_width=100,row_height=100)#单元格最大高度或宽度为100像素
效果
这个值估计与不同机器、分辨率有关,在5.7-6.2之间
遇到的坑
报错pywintypes.com_error:(-2147352567,'发生意外。',(0,None,'未找到指定文件。',None,0,-2146827284),None)
对路径使用os.path.abspath()
参考文献
xlwingsdevdocumentation
报错pywintypes.com_error:(-2147352567,‘发生意外。‘,(0,None,‘未找到指定文件。‘,None,0,-2146827284),None)
到此这篇关于Pythonxlwings插入Excel图片的实现方法的文章就介绍到这了,更多相关Pythonxlwings插入图片内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。