最近工作用到數據對比處理,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爲:
已經實現將指區域中存在目標對象找到並獲取其對應指功能。