我有一个 Excel 工作簿,其中包含一个通过 PowerQuery 链接到多个数据源文件的表。用户很可能会在数据源文件中更新它们。当数据源文件由另一个用户打开时,我是否可以使用 powerquery 刷新我的表。我不断收到消息:
[DataSource.Error] 该进程无法访问文件“......”,因为它正在被另一个进程使用。
过滤掉名称以“~”开头的文件。
我在尝试弄清楚如何做同样的事情时发现了这个主题。 以防万一将来有人发现这个,我会提到我如何应用 MarcelBeug 的解决方案。
代码是这样的
let Source = Folder.Files("MyFilePathHere\"),
#"Added Custom" = Table.AddColumn(Source, "Custom", each
Excel.Workbook([Content],true)),
更改为
let Source = Folder.Files("MyFilePathHere\"),
#"Filtered Rows1" = Table.SelectRows(Source, each not Text.StartsWith([Name], "~$")),
#"Added Custom" = Table.AddColumn(#"Filtered Rows1", "Custom", each
Excel.Workbook([Content],true)),
我通过 GUI 编辑器对文件名使用文本过滤器进行了更改。 过滤器为“不开头”,值为“~$”。
经过大量的试验和错误以及大量的恩典,我找到了以下解决方法,无论 OneDrive 同步状态如何,该方法都确实有效。
情况说明: 当 OneDrive for Desktop 同步 Excel 工作簿(我们称之为数据工作簿),并且该工作簿尝试通过 PowerQuery 甚至直接通过常规数据透视表(甚至不是 PowerPivot)从另一个工作簿(我们称之为分析工作簿)访问时 - Excel 会定期抛出错误“进程无法访问该文件,因为该文件正在被另一个进程使用”。发生这种情况是因为导入/读取机制需要对数据工作簿进行独占访问(即使它只是读取它)。你对此无能为力。
解决方法: 您必须“欺骗”导入机制,使其认为它没有访问另一个工作簿。有一个足够好的解决方案,可以在大多数情况下应用和自动化:
这成功规避了 OneDrive 的所有问题。 有关在分析工作簿中使用常规数据透视表作为数据使用者的示例的详细信息:
备注: