1.背景
工作中使用表格,经常会遇到这样的需求:收到一大堆的文件,需要将文件名与表格中的数据进行匹配,从而查找出来没有收到的文件。
笔者最近遇到一个实际问题,收到了300多家企业的承诺书照片,这些承诺书文件名是企业的名称,同时excel表格中每行保存着企业的信息,其中第一列是企业的名称。需要对交过承诺书的企业,在表格上进行标注,单元格背景标黄,以此来筛选出没交承诺书的企业。
要是一个个的Ctrl + F进行查找,费事费力。笔者通过Python相关库,来实现自动化匹配。
2.实现
- 思路:首先需要获取文件夹中各个文件的名称,保存在一个列表中。之后对单元格每行遍历,判断其名字是否存在于列表。
- 实现代码:需要用到xlwings库来对excel进行操作,代码逻辑见注释。
import xlwings as xw
import os
# 打开excel文件
app = xw.App(visible=False,add_book=False)
# excel的文件路径
filepath = './myexcel.xlsx'
wb = app.books.open(filepath)
# 对excel的sheet1操作
sht = wb.sheets('Sheet1')
# 将当前文件夹下的文件名保存在列表中
doc = os.listdir()
# 对列表中的文件名称处理,去掉后缀,比如123.jpeg->123
for i in range(len(doc)):
index = doc[i].rfind('.')
doc[i] = doc[i][0:index]
# 获取excel表格的行数和列数
nrows = sht.api.UsedRange.Rows.count
ncolumns = sht.api.UsedRange.Columns.count
# 对excel单元格每一行遍历,若行首单元格名称存在于列表中,则将其背景标黄
for i in range(1,nrows+1):
item = sht.range(f'A{i}')
if item.value in doc:
item.color = (255,255,0)
# 对excel表格关闭保存
wb.save()
wb.close()
app.quit()
3.存在不足与后续改进
- 目前这一版本需要文件名与excel表格中的内容需要完全相同,才能匹配。但是实际工作中,我们收取到的文件名往往是缩写或是缺少一部分,不能与表格内容完全匹配。后续可以在这方面进行改进。
网友评论