如何用Python逐个打开文件夹内Excel文件,前一个关闭后再打开下一个
问题根因
你当前代码一次性打开所有Excel文件的核心原因是:os.system("start EXCEL.EXE "+i)中调用的Windows start命令默认是异步启动程序,不会等待进程退出就直接返回执行下一轮循环。你尝试的普通只读open判断不生效,是因为Excel仅对文件的写入操作加独占锁,只读打开不会触发IOError异常,无法识别文件已被锁定的状态。
解决方案
推荐使用以下两种方案实现等待前一个Excel文件关闭后再打开下一个的需求:
方案1:最简修改,使用start的/wait参数
仅需要在原有启动命令中增加/wait参数,即可强制命令行等待Excel进程关闭后再返回,同时给文件路径加双引号避免路径含空格时报错:
import os import glob inputsFiles = glob.glob('Sub_Inputs/[a-z]*xlsx') for i in inputsFiles: print('请填写与 ' + os.path.basename(i)[:-5] + ' 相关的内容') os.system(f"start /wait EXCEL.EXE \"{i}\"")
方案2:使用subprocess模块(稳定性更高,推荐)
Python官方推荐的进程管理模块subprocess可控性更强,适配性更好:
import os import glob import subprocess inputsFiles = glob.glob('Sub_Inputs/[a-z]*xlsx') for file_path in inputsFiles: file_name = os.path.basename(file_path)[:-5] print(f'请填写与 {file_name} 相关的内容') subprocess.run( ["cmd", "/c", "start", "/wait", "EXCEL.EXE", file_path], shell=True, check=True )
自定义文件锁定检测方法
如果需要单独判断文件是否被Excel占用,可以尝试以写入模式打开文件检测独占锁:
def check_file_available(file_path): try: # 写入模式打开会触发独占锁检测,能打开说明文件未被占用 with open(file_path, "a") as f: return True except IOError: return False
内容的提问来源于stack exchange,提问作者Vesper
相关产品推荐
相关产品推荐

