最近工作用到数据对比处理,Excel用的比较多,奈何自己VBA不够熟悉,复杂一点的功能,做起来挺吃力的,就想起了Python来解决。 将期望功能代码打包成exe文件,在window环境中运行,获得想要的结果。
本文代码只是模拟excel中VLOOKUP函数为例,具体实践中,可以根据自己需要,修改功能代码。
1、安装打包所需的pyinstaller: pip install pyinstaller
2、要实现的VLOOKUP功能代码:
# -!- coding: utf-8 -!-from openpyxl import load_workbookimport win32apiimport win32con# 读取指定excelwb = 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).valueif 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).valuewb.save('./1_data_location/Goal.xlsx')wb.closeprint("模拟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行,此处递归超出了这一限制,所以需要修改递归限制次数。
参考文章:/questions/38977929/pyinstaller-creating-exe-runtimeerror-maximum-recursion-depth-exceeded-while-ca
需要继续执行第5点、第6点,如果未报上面错误,则直接看第7步。
5、第四步运行后会生成xxx.spec,在该文件第二行加入:
import syssys.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为:
已经实现将指区域中存在目标对象找到并获取其对应指功能。