近期,业务同事有个巨大的烦恼一直困扰着她,因使用频繁一直麻烦其他同事帮忙插图实在很不方便,她找到了斑点鱼帮她解决这个问题。
业务同事A:斑点鱼,可以帮我修复excel宏插图错位的问题么?
Spotfish:宏斑点鱼不会,斑点鱼可以用python对excel插图,但要按照规定格式来,你还需要吗?
业务同事A:可以,只要不错位就行,不用再麻烦其他同事帮我跑图~
Spotfish:好的,那斑点鱼就用Python跑一个程序,稍等哦~
需求:用Python解决excel宏插图错位问题
==> 需求转化:python批量对excel指定列指定sheet进行插图
指定sheet命名:photo
指定列命名:curl
格式要求:注意大小写都要一致
插完图后的excel记得移出文件夹!!!
如果忘记移出再次运行会再次插图,且是直接叠在原图上,文件会越来越大!
# 导入模块
import xlwings as xw
from win32com import client
from PIL import Image
import os
import glob
print('请确认是否已填写 curl Articlecode 这2个字段名!')
print('请确认是否已填写 photo 这个sheet名!')
print('确认完成则进入下一步————————————————————')
h=int(input("请输入Articlecode这个字段所在的行数:"))
print(h)
filelst=glob.glob('*.xlsx')
print(filelst)
for file in filelst:
df=pd.read_excel(file,sheet_name='photo',header=h-1)
print(df.columns)
if 'Articlecode' not in df.columns:
print("请检查输入的行数是否正确! or 请检查Articlecode这个字段填写是否正确!")
df['curl']='图片所在文件夹路径'+df['Articlecode'] +'.jpg'
row_curl=df.columns.tolist().index('curl')
header=h-1
addstep=header+2
##为了确定图片插入所在列,尽量在K列以前,如果超过K列就在字典里继续添加对应数字
collst={0:'A',1:'B',2:'C',4:'D',5:'E',6:'F',7:'G',8:'H',9:'I',10:'J',11:'K'}
photo_col=collst[row_curl]##图片插入所在列
no_pic=BASE_PATH.joinpath('no_pic.jpg')
# #############若还是有未分类的直接输出到款的图片
app=xw.App(visible=True, add_book=False)
wb= app.books.open(file)
sht = wb.sheets['photo']
for i,m in enumerate(df['Articlecode']):
# print(i,m)
if len(str(m))>1:
print(i,m)
dfi=df[df['Articlecode']==m]
url=dfi.iloc[0,row_curl]
print(url)
try:
print('try')
add_center(sht,'%s%s'%(photo_col,str(i+addstep)), url)
print('yes')
except:
print('except')
add_center(sht,'%s%s'%(photo_col,str(i+addstep)), no_pic)
wb.save()
wb.close()
app.quit() #在不保存的情况下,退出excel程序。
print("EXCEL FINISHED")
图1:插图代码运行过程
图2:插图结果最终展示