如何检查OneDrive中指向SharePoint的在线Excel文件是否被其他用户占用
方案1:临时锁文件检测(适用于OneDrive本地同步场景)
当有用户打开SharePoint存储的Excel文件时,OneDrive会在本地同步目录自动生成对应隐藏临时锁文件,命名规则为~$<原文件名>.xlsx,只要检测该文件是否存在即可判断占用状态:
- 首先解析Excel快捷方式指向的本地同步目录中的实际文件路径
- 按照命名规则拼接临时锁文件的完整路径,调用系统接口检测文件是否存在
- 检测时需开启隐藏文件读取权限,避免系统隐藏属性导致检测失效
方案2:写入权限检测(通用、准确率最高)
直接尝试以可写模式打开目标文件,若抛出权限错误则证明文件已被占用,该方法不依赖临时锁文件,同时覆盖本地占用、远程同步占用的所有场景:
import os def is_file_available(file_path): if not os.path.exists(file_path): return False try: # 尝试以读写模式打开文件,无异常则说明未被占用 with open(file_path, "r+") as f: pass return True except PermissionError: return False
调用该函数返回True时再执行写入操作即可,可避免OneDrive同步冲突。
方案3:Microsoft Graph API检测(适用于直接操作SharePoint在线文件场景)
如果没有使用OneDrive本地同步,可调用Graph API查询目标文件的checkoutType属性,若属性值不为none则说明文件被用户签出/占用,该方案需要提前申请SharePoint对应接口的访问权限。
注意事项
- 检测操作和写入操作的间隔不要超过1秒,避免中间状态发生变化导致冲突
- 若检测到文件被占用,可增加间隔重试逻辑,设置最大重试次数避免无限等待
- 不要直接使用快捷方式路径进行检测,需先解析快捷方式指向的实际文件路径
内容的提问来源于stack exchange,提问作者mclogan
相关产品推荐
相关产品推荐

