python实现excel中vlookup函数功能并打包为win环境可执行的exe文件
最近工作用到数据对比处理,Excel用的比较多,奈何自己VBA不够熟悉,复杂一点的功能,做起来挺吃力的,就想起了Python来解决。 将期望功能代码打包成exe文件,在window环境中运行,获得想要的结果。
本文代码只是模拟excel中VLOOKUP函数为例,具体实践中,可以根据自己需要,修改功能代码。
1、安装打包所需的pyinstaller: pip install pyinstaller
2、要实现的VLOOKUP功能代码:
# -!- coding: utf-8 -!-
from openpyxl import load_workbook
import win32api
import win32con
# 读取指定excel
wb = load_workbook("./1_data_location/Source.xlsx")
ws = wb[wb.sheetnames[0]]
rows = ws.max_row
# 遍历目标单元格
for goal_index in range(2, rows + 1):
goal_cell_value = ws.cell(row=goal_index, column=5).value
if goal_cell_value is not None:
# 遍历数据源单元格
for source_index in range(2, rows + 1):
source_cell_value = ws.cell(row=source_index, column=1).value
# 执行区域存在目标数据时
if goal_cell_value == source_cell_value:
ws.cell(row=goal_index, column=6).value = ws.cell(row=source_index, column=2).value
wb.save('./1_data_location/Goal.xlsx')
wb.close
print("模拟VLOOKUP函数结束")
##提醒OK消息框
win32api.MessageBox(0, "模拟VLOOKUP函数执行完毕", "提醒", win32con.MB_OK)
3、在项目所在文件夹上按住Shift同时点击鼠标右键,选中“在此处打开Powershell窗口(S)”
4、在出来的黑窗口中输入:pyinstaller VloopupFunction.py,稍等几分钟,如果报如下错误:
RecursionError: maximum recursion depth exceeded
原因是python在win中默认递归1000行,此处递归超出了这一限制,所以需要修改递归限制次数。
需要继续执行第5点、第6点,如果未报上面错误,则直接看第7步。
5、第四步运行后会生成xxx.spec,在该文件第二行加入:
import sys
sys.setrecursionlimit(1000000)
将递归限制次数最高改为一百万次。
如下图:
6、在第步出来的黑窗口中执行:pyinstaller VloopupFunction.spec ,等待执行完毕。
7、在生成的dist目录下的VloopupFunction目录中创建文件夹 1_data_location,并将Source.xlsx复制到该目录下。
8、双击dist目录下的VloopupFunction中的VloopupFunction.exe,则会在1_data_location生成Goal.xlsx。
Source.xlsx为:
Goal.xlsx为:
已经实现将指区域中存在目标对象找到并获取其对应指功能。