PowerQuery刷新报DataSource.Error文件被占用的解决方法咨询
Power Query读取被占用Excel文件报错解决方案
DataSource.Error: The process cannot be access the file.......because it is being used by another process.
该报错的核心原因是File.Contents函数读取本地文件时需要申请文件读权限,当文件被其他用户/进程以独占模式打开时,权限申请被拒绝就会触发错误,以下是可落地的解决方案:
方案1:修改Power Query M代码,先复制临时副本再读取
该方案兼容性最高,无需修改源文件设置,直接替换你当前的查询语句即可:let // 定义源文件路径 SourcePath = "C:\Users\G019\OneDrive - Client\P_MC\1 Client File\Official List_1Drive.xlsx", // 生成临时文件存放路径 TempPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\Temp\PQ_Temp_" & Text.From(DateTime.FixedLocalNow()) & ".xlsx", // 复制源文件到临时路径(复制操作无需独占权限,源文件被占用时也可正常执行) CopyFile = File.Copy(SourcePath, TempPath, true), // 读取临时文件内容 Source = Excel.Workbook(File.Contents(TempPath), null, true), // 可选步骤:读取完成后删除临时文件,避免占用本地存储空间 DeleteTemp = File.Delete(TempPath) in Source方案2:使用OneDrive在线直链作为数据源(适配当前OneDrive存储场景)
你的源文件存放在OneDrive同步目录下,可直接通过OneDrive在线链接读取,完全绕过本地文件系统的锁机制:- 浏览器登录OneDrive网页端,找到
Official List_1Drive.xlsx文件 - 右键文件选择「嵌入」,生成嵌入代码后提取其中的src属性链接
- 将Power Query的源替换为
Web.Contents("你提取到的直链地址")即可,源文件被本地打开完全不影响在线读取
- 浏览器登录OneDrive网页端,找到
方案3:设置源文件为共享编辑模式
打开Official List_1Drive.xlsx,依次点击「文件」-「信息」-「共享工作簿(旧版)」,勾选「允许多用户同时编辑,同时允许工作簿合并」后保存,设置完成后文件不会以独占模式被打开,其他进程可正常读取文件内容。方案4:定期生成数据源只读快照
如果源文件更新频率不高,可编写简单的批处理脚本,定时将源文件复制为同目录下的只读快照文件,Power Query直接读取快照,哪怕源文件被占用也不会影响刷新。
内容的提问来源于stack exchange,提问作者12Rev79
相关产品推荐
相关产品推荐

