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

ArcGIS Pro脚本删除Excel模板遇[WinError 32]文件占用错误求助

问题:Excel文件被进程占用导致无法删除(ArcGIS Pro Notebook + openpyxl)

场景描述

在ArcGIS Pro v3.3的Notebooks中执行Python脚本,流程为:从托管要素服务下载Excel数据 → 使用openpyxl加载空白Excel模板并写入数据 → 另存为新文件后尝试删除原模板,出现错误[WinError 32] The process cannot access the file because it is being used by another process。此前脚本运行正常,近期未修改代码。

相关代码

###
excel1 = openpyxl.load_workbook(file path to xlsx document) ## 存储待复制的源数据
excel2 = openpyxl.load_workbook(file path to xlsx document) ## 空白模板

### 基于excel1单元格值定义变量并写入excel2:
value1 = excel1.cell(1.1).value
excel2.cell(2.2.).value = value1
### 将写入数据的模板另存为新Excel文件
excel2.save(file path)
### 删除原模板
excel2.close()
os.remove(file path to excel2)


##### 我也尝试了以下方法,但删除步骤仍出现相同错误:
excel2.save(path to new file)
excel2filepath = (file path the xlsx doc)
excel2.close
os.remove(excel2filepath)

报错信息

PermissionError                           Traceback (most recent call last)
In  [5]:
Line 227:   transferToMT()

In  [5]:
Line 216:   os.remove(os.path.join(CP_Folder, ProjectName + "_MTBlank.xlsx"))

PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\FNL_Projects\\Documentation\\AndrewTest4\\AndrewTest4_CP\\AndrewTest4_MTBlank.xlsx

问题分析与解决方案

为何文件会被锁定?

  1. openpyxl资源未正确释放:代码存在两处关键疏漏:
    • 第二种尝试中的excel2.close未加括号,等于未实际调用关闭方法,文件句柄始终被进程持有;
    • 即使调用了excel2.close(),手动关闭的方式可能因Python垃圾回收延迟,导致文件句柄未及时释放;
    • 未关闭excel1工作簿,资源泄漏可能引发连锁的文件锁定问题。
  2. ArcGIS Pro环境的进程锁定:Notebook内核或ArcGIS Pro后台组件可能对文件持有额外锁定,尤其是文件被预览、或被ArcGIS Catalog引用时。
  3. Office后台进程干扰:Excel的后台服务(如Microsoft Office Upload Center、文件预览进程)可能在后台占用模板文件。

如何删除该文件?

推荐按以下步骤解决:

  1. 使用上下文管理器自动释放资源(openpyxl官方推荐方式,彻底避免手动关闭的疏漏):
    import openpyxl
    import os
    
    excel1_path = "你的源Excel路径"
    excel2_path = "你的空白模板路径"
    new_file_path = "保存新文件的路径"
    
    # 用with语句加载工作簿,代码块结束后自动关闭释放资源
    with openpyxl.load_workbook(excel1_path) as excel1:
        value1 = excel1.cell(row=1, column=1).value
        with openpyxl.load_workbook(excel2_path) as excel2:
            excel2.cell(row=2, column=2).value = value1
            excel2.save(new_file_path)
    
    # 此时两个工作簿已完全释放,执行删除
    os.remove(excel2_path)
    
  2. 关闭相关进程:打开任务管理器,结束所有EXCEL.EXE进程、ArcGIS Pro相关进程,再重试删除。
  3. 添加延迟删除:若上下文管理器仍有延迟,可在删除前加短暂等待,让系统完全释放句柄:
    import time
    time.sleep(1)  # 等待1秒
    os.remove(excel2_path)
    
  4. 重启Notebook内核:在ArcGIS Pro Notebook中点击"重启内核"按钮,清除可能存在的进程泄漏。

是否是Excel本身的问题导致?

可能性极低。多数情况是代码的资源管理不当或ArcGIS Pro环境的进程锁定导致,而非Excel软件本身的问题。仅当Excel的后台同步服务在占用文件时才可能干扰,但这种情况极少发生,优先排查代码和ArcGIS环境的问题即可。

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:44:50