You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:36:08