SharePoint中Excel跨文件相对路径引用报错问题求助
问题根源
原Excel公式中TEXTSPLIT的参数顺序错误,导致分割路径时生成包含空值的数组,后续TEXTJOIN拼接时产生多余双斜杠;同时SharePoint在线路径对格式要求严格,双斜杠会被判定为无效绝对路径,触发DataFormat.Error。
解决方案1:修正Excel路径生成公式
调整A1-A4的公式,避免生成多余斜杠:
A1(获取当前文件完整路径)
=CELL("filename")输出示例:
https://contoso.sharepoint.com/sites/sitename/Shared Documents/General/my_folder/[file1.xlsx]my_sheetA2(提取当前文件所在文件夹路径)
=LEFT(A1, FIND("[", A1)-1)输出示例:
https://contoso.sharepoint.com/sites/sitename/Shared Documents/General/my_folder/A3(获取目标文件所在的上级文件夹路径)
修正TEXTSPLIT参数顺序,忽略空值后再拼接:=TEXTJOIN("/", TRUE, DROP(TEXTSPLIT(A2, "/",, TRUE),,1)) & "/"输出示例:
https://contoso.sharepoint.com/sites/sitename/Shared Documents/General/或者用更简洁的替代公式(避免分割拼接):
=LEFT(A2, LEN(A2)-LEN(RIGHT(A2, FIND("/", SUBSTITUTE(A2, "/", "|", LEN(A2)-LEN(SUBSTITUTE(A2, "/", "")))))))A4(生成目标文件完整路径)
=A3 & "my_other_folder/file2.xlsx"输出示例:
https://contoso.sharepoint.com/sites/sitename/Shared Documents/General/my_other_folder/file2.xlsx
解决方案2:PowerQuery中增加路径清理步骤
即使公式存在小误差,也可通过PowerQuery的URL标准化函数自动修复路径:
修改高级编辑器代码,添加CleanedFilePath步骤:
let FilePath = Excel.CurrentWorkbook(){[Name="ABS_PATH"]}[Content]{0}[Column1], // 标准化URL,自动去除多余斜杠 CleanedFilePath = Uri.BuildString(Uri.Parts(FilePath)), TabName = Excel.CurrentWorkbook(){[Name="TAB_NAME"]}[Content]{0}[Column1], Source = Excel.Workbook(File.Contents(CleanedFilePath), null, true), Sheet_fromMec = Source{[Item=TabName,Kind="Sheet"]}[Data] in Sheet_fromMec
如果Uri函数无法使用,可改用文本替换:
CleanedFilePath = Text.Replace(Text.Replace(FilePath, "//", "/"), "https:/", "https://"),
验证效果
修正后生成的路径将是标准的单斜杠格式,PowerQuery可正常识别为有效SharePoint绝对路径,实现跨文件夹数据引用,且路径结构可复用至其他站点(如sitename_2)。
内容的提问来源于stack exchange,提问作者Dario

