Python的OS模块详解:https://blog.csdn.net/qq_21337539/article/details/126802364
Python的sys模块用法:https://blog.csdn.net/qq_21337539/article/details/126685688openpyxl操作Excel之添加图片add_image():https://blog.csdn.net/qq_51865683/article/details/123761383#_399
获取指定路径下特定后缀的文件(包含子文件夹):https://blog.csdn.net/qq_41938858/article/details/95979019
python获取系统当前时间:https://blog.csdn.net/qq_34321590/article/details/119601285
python生成字母a到z字母:https://blog.csdn.net/weixin_47481982/article/details/123251770
更改路径为运行文件路径,创建打开新excel表格
# -*- coding:utf-8 -*-
import openpyxl
from openpyxl.drawing.image import Image
import os
import datetime
# pip3.7 install openpyxl,pillow 需要安装模块
# sys.argv[0]获取到一个文件的绝对路径【需要import sys】
# os.path.abspath(__file__)对当前所执行的模块的路径进行获取其绝对路径(不能直接在Python控制台下运行,因为在没有任何脚本执行的时候,它是没有对_ _ file_ _进行定义的。)
img_path = os.path.dirname(os.path.abspath(__file__)) # sys.argv[0]相当于os.path.abspath(__file__)
os.chdir(img_path) # 更改路径为运行文件img.py下的路径 python3 /user/.../img.py
wb = openpyxl.Workbook() # 创建空的Workbook对象。打开excel
sheet = wb.active # 获取活动表
运行文件的同级文件夹pic,插入pic文件夹下的罗列文件夹列表下的图片(/pic/Atu/A-1.png, /pic/Btu/B-1.png)到excel表格,写入的列表文件名和其文件下的图片位于同一行。
# 运行文件img.py的同级文件夹pic,插入pic文件夹下的罗列文件夹列表下的图片(/pic/Atu/A-1.png, /pic/Btu/B-1.png)到excel表格,写入的列表文件名和其文件下的图片位于同一行。
# 返回某个文件夹下的文件(带路径),oneDoc指文件夹路径
def listOneDoc(oneDoc):
listDoc = os.listdir(oneDoc)
for i in range(len(listDoc)):
listDoc[i] = oneDoc + '/' + listDoc[i]
listDoc.sort()
return listDoc
def insertPic(picInsert, starRow):
cols_list = [chr(x) for x in range(65, 90)] # 生成字母A-Z列表
rowPic = listOneDoc(picList[picInsert])
starCol = 1 # B列开始
for i in rowPic:
# A列写入图片所在的文件夹。os.path.basename(path)传入一个完整的文件路径只获取其文件名;os.path.dirname(path)返回path的文件夹名。
sheet.cell(starRow, starCol).value = os.path.basename(os.path.dirname(i))
img = Image(i) # 加载指定路径图像
img.width = 720 # 设置图像宽度
img.height = 400 # 设置图像高度
sheet.row_dimensions[starRow].height = 300 # 设置行宽
sheet.column_dimensions[cols_list[starCol]].width = 100 # 设置列宽
pic = str(cols_list[starCol]) + str(starRow) # 指定图像左上角所锚定的单元格
sheet.add_image(img, pic) # 第一列添加图片
starCol += 1
# 列出运行文件img.py同级的pic文件夹下的所有文件
picList = listOneDoc(img_path + '/pic')
# 循环插入pic文件夹下的所有文件名和图片。picList列表索引从0开始。starRow=i+1即从第一行开始插入,+2即从第二行开始插入
for i in range(0, len(picList)):
insertPic(picInsert=i, starRow=i+2)
插入第一列接着插入第二列,直到插入完所有图片
# 插入第一列接着插入第二列,直到插入完所有图片
# 获取指定路径下特定后缀的文件(包含子文件夹)
def getListFiles(path):
ret = []
for root, dirs, files in os.walk(path):
for filespath in files:
ret.append(os.path.join(root, filespath))
pnglist = []
for i in ret:
if os.path.splitext(i)[1] == ".png":
pnglist.append(i)
return pnglist
img_list = getListFiles(img_path)
cols_list = [chr(i) for i in range(65, 90)] # 生成字母A-Z列表
for x in cols_list[0:2]: # 设置A到B列的列宽cols_list[0:2]。
sheet.column_dimensions[x].width = 100
# 插入第一列接着插入第二列,直到插入完所有图片cols_list[0:2]
listIndex = 1
placeA = 1
placeB = 1
for i in img_list:
img = Image(i) # 加载指定路径图像,每次遍历都重新打开这张图片,以免出错
img.width = 800 # 设置图像宽度
img.height = 400 # 设置图像高度
if listIndex % 2 == 1:
sheet.row_dimensions[placeA].height = 300 # 设置行宽
pic = 'A' + str(placeA) # 指定图像左上角所锚定的单元格
sheet.add_image(img, pic) # 第一列添加图片
placeA += 1
else:
pic = 'B' + str(placeB) # 指定图像左上角所锚定的单元格
sheet.add_image(img, pic) # 第二列添加图片
placeB += 1
listIndex += 1
插完一半图片到第一列,再插入第二列
# 插完一半图片到第一列,再插入第二列
# 获取指定路径下特定后缀的文件(包含子文件夹)
def getListFiles(path):
ret = []
for root, dirs, files in os.walk(path):
for filespath in files:
ret.append(os.path.join(root, filespath))
return ret
ret = getListFiles(img_path)
img_list = set()
for i in ret:
if os.path.splitext(i)[1] == ".png":
img_list.add(i)
sheet.column_dimensions['A'].width = 100
sheet.column_dimensions['B'].width = 100
# 插完一半图片到第一列,再插入第二列cols_list[0:2]
place = 1
place2 = 1
for i in img_list:
img = Image(i) # 加载指定路径图像,每次遍历都重新打开这张图片,以免出错
img.width = 800 # 设置图像宽度
img.height = 400 # 设置图像高度
if place < len(img_list)/2+1: # 插入A列
sheet.row_dimensions[place].height = 300 # 设置行宽
pic = 'A' + str(place) # 指定图像左上角所锚定的单元格
sheet.add_image(img, pic) # 添加图片
place += 1
else: # 插入B列
pic = 'B' + str(place2) # 指定图像左上角所锚定的单元格
sheet.add_image(img, pic) # 添加图片
place2 += 1
保存新建的文件
curr_time = datetime.datetime.now() # 2019-07-06 14:55:56.873893 <class 'datetime.datetime'>
timeStr = 'output_'+curr_time.strftime("%Y%m%d-%H%M%S")+'.xlsx'
wb.save(timeStr) # 插入完成保存
print('图片插入完成:', timeStr)
完整代码如下:
# -*- coding:utf-8 -*-
import openpyxl
from openpyxl.drawing.image import Image
import os
import datetime
# pip3.7 install openpyxl,pillow 需要安装模块
# sys.argv[0]获取到一个文件的绝对路径【需要import sys】
# os.path.abspath(__file__)对当前所执行的模块的路径进行获取其绝对路径(不能直接在Python控制台下运行,因为在没有任何脚本执行的时候,它是没有对_ _ file_ _进行定义的。)
img_path = os.path.dirname(os.path.abspath(__file__)) # sys.argv[0]相当于os.path.abspath(__file__)
os.chdir(img_path) # 更改路径为运行文件img.py下的路径 python3 /user/.../img.py
wb = openpyxl.Workbook() # 创建空的Workbook对象。打开excel
sheet = wb.active # 获取活动表
#########################################################################################################
# 运行文件img.py的同级文件夹pic,插入pic文件夹下的罗列文件夹列表下的图片(/pic/Atu/A-1.png, /pic/Btu/B-1.png)到excel表格,写入的列表文件名和其文件下的图片位于同一行。
# 返回某个文件夹下的文件(带路径),oneDoc指文件夹路径
def listOneDoc(oneDoc):
listDoc = os.listdir(oneDoc)
for i in range(len(listDoc)):
listDoc[i] = oneDoc + '/' + listDoc[i]
listDoc.sort()
return listDoc
def insertPic(picInsert, starRow):
cols_list = [chr(x) for x in range(65, 90)] # 生成字母A-Z列表
rowPic = listOneDoc(picList[picInsert])
starCol = 1 # B列开始
for i in rowPic:
# A列写入图片所在的文件夹。os.path.basename(path)传入一个完整的文件路径只获取其文件名;os.path.dirname(path)返回path的文件夹名。
sheet.cell(starRow, starCol).value = os.path.basename(os.path.dirname(i))
img = Image(i) # 加载指定路径图像
img.width = 720 # 设置图像宽度
img.height = 400 # 设置图像高度
sheet.row_dimensions[starRow].height = 300 # 设置行宽
sheet.column_dimensions[cols_list[starCol]].width = 100 # 设置列宽
pic = str(cols_list[starCol]) + str(starRow) # 指定图像左上角所锚定的单元格
sheet.add_image(img, pic) # 第一列添加图片
starCol += 1
# 列出运行文件img.py同级的pic文件夹下的所有文件
picList = listOneDoc(img_path + '/pic')
# 循环插入pic文件夹下的所有文件名和图片。picList列表索引从0开始。starRow=i+1即从第一行开始插入,+2即从第二行开始插入
for i in range(0, len(picList)):
insertPic(picInsert=i, starRow=i+2)
###################################################################################################
###################################################################################################
'''
# 插入第一列接着插入第二列,直到插入完所有图片
# 获取指定路径下特定后缀的文件(包含子文件夹)
def getListFiles(path):
ret = []
for root, dirs, files in os.walk(path):
for filespath in files:
ret.append(os.path.join(root, filespath))
pnglist = []
for i in ret:
if os.path.splitext(i)[1] == ".png":
pnglist.append(i)
return pnglist
img_list = getListFiles(img_path)
cols_list = [chr(i) for i in range(65, 90)] # 生成字母A-Z列表
for x in cols_list[0:2]: # 设置A到B列的列宽cols_list[0:2]。
sheet.column_dimensions[x].width = 100
# 插入第一列接着插入第二列,直到插入完所有图片cols_list[0:2]
listIndex = 1
placeA = 1
placeB = 1
for i in img_list:
img = Image(i) # 加载指定路径图像,每次遍历都重新打开这张图片,以免出错
img.width = 800 # 设置图像宽度
img.height = 400 # 设置图像高度
if listIndex % 2 == 1:
sheet.row_dimensions[placeA].height = 300 # 设置行宽
pic = 'A' + str(placeA) # 指定图像左上角所锚定的单元格
sheet.add_image(img, pic) # 第一列添加图片
placeA += 1
else:
pic = 'B' + str(placeB) # 指定图像左上角所锚定的单元格
sheet.add_image(img, pic) # 第二列添加图片
placeB += 1
listIndex += 1
'''
###################################################################################################
###################################################################################################
'''
# 插完一半图片到第一列,再插入第二列
# 获取指定路径下特定后缀的文件(包含子文件夹)
def getListFiles(path):
ret = []
for root, dirs, files in os.walk(path):
for filespath in files:
ret.append(os.path.join(root, filespath))
return ret
ret = getListFiles(img_path)
img_list = set()
for i in ret:
if os.path.splitext(i)[1] == ".png":
img_list.add(i)
sheet.column_dimensions['A'].width = 100
sheet.column_dimensions['B'].width = 100
# 插完一半图片到第一列,再插入第二列cols_list[0:2]
place = 1
place2 = 1
for i in img_list:
img = Image(i) # 加载指定路径图像,每次遍历都重新打开这张图片,以免出错
img.width = 800 # 设置图像宽度
img.height = 400 # 设置图像高度
if place < len(img_list)/2+1: # 插入A列
sheet.row_dimensions[place].height = 300 # 设置行宽
pic = 'A' + str(place) # 指定图像左上角所锚定的单元格
sheet.add_image(img, pic) # 添加图片
place += 1
else: # 插入B列
pic = 'B' + str(place2) # 指定图像左上角所锚定的单元格
sheet.add_image(img, pic) # 添加图片
place2 += 1
'''
###################################################################################################
curr_time = datetime.datetime.now() # 2019-07-06 14:55:56.873893 <class 'datetime.datetime'>
timeStr = 'output_'+curr_time.strftime("%Y%m%d-%H%M%S")+'.xlsx'
wb.save(timeStr) # 插入完成保存
print('图片插入完成:', timeStr)