如何修改Python Excel合并脚本 打包为exe后可在任意存放目录运行
修改方案
所有硬编码的固定路径将替换为exe运行时所在的当前工作目录,同时新增Excel文件过滤逻辑,避免读取非Excel格式文件导致报错,你不需要额外引入新的依赖库。
- 打包命令使用
pyinstaller -F 你的脚本文件名.py即可生成单EXE文件,同事仅需要把EXE放到需要合并的Excel所在的文件夹,双击运行就会自动处理 - 最终合并生成的
gravacaoRodConsolidado.xlsx文件也会保存在当前文件夹内
修改后的完整代码如下:
import os import pandas as pd appended_rods = [] # 获取当前exe/脚本运行时所在的工作目录 current_dir = os.getcwd() # 遍历当前目录下的所有文件,仅筛选Excel文件 for relatorio in os.listdir(current_dir): # 跳过非Excel文件、以及最终生成的合并文件,避免重复读取 if not (relatorio.endswith('.xlsx') or relatorio.endswith('.xls')) or relatorio == 'gravacaoRodConsolidado.xlsx': continue rod_merged = pd.read_excel(relatorio, header = [0]) extract_state = str(rod_merged.iloc[[],[0]]) start = extract_state.find("/") + len("/") end = extract_state.find(" e suas") state = extract_state[start:end] extract_period = str(rod_merged.iloc[[],[0]]) start = extract_period.find("De: ") + len("De: ") end = extract_period.find("21.") period = extract_period[start:end]+"21" rod = pd.read_excel(relatorio, header =[1]) rod["Regional"] = state rod["Período"] = period appended_rods.append(rod) reformatedDataSheet = pd.concat(appended_rods, ignore_index=True) relatorio = reformatedDataSheet.filter(items=['Origem / ROD', 'Categoria / ROD','Item / ROD','Quantidade','Unidade', 'Regional', 'Período']) # 合并结果直接输出到当前目录 relatorio.to_excel(os.path.join(current_dir, 'gravacaoRodConsolidado.xlsx'), index = False)
如果你需要给同事更明确的运行提示,可以在获取current_dir后新增一行代码print(f"正在处理目录:{current_dir} 下的Excel文件,处理完成后结果将保存在该目录下"),运行EXE时会弹出提示框显示对应信息。
内容的提问来源于stack exchange,提问作者Madronos
相关产品推荐
相关产品推荐

