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

R语言访问企业SharePoint xlsx文件报错解决方案咨询

问题说明

需要通过R读取企业SharePoint云盘内存储的xlsx文件,目标文件原始访问地址:

https://xxxx.sharepoint.com/:x:/r/sites/cqa/xxxx/_layouts/15/doc2.aspx?sourcedoc=%7BFxxx390-B71D-4C71-B252-6E3DCA8E9FDA%7D&file=Updated%20LXXal%20Reqxxxxents%20for%20XXXXX%20XXXX%20Actixxxx.xlsx&action=default&mobileredirect=true&cid=0abe8bcd-c785-4c14-a9f3-263e8e806aa6

已尝试两种方案均失败:

  • 调用httr::GET携带账号密码发起请求,代码如下:
    require(httr)
    url <- "above url"
    r <- GET(url, authenticate("amit.sahoo@xxxx.com","password"))
    
    请求返回403权限错误,响应信息:
    Date: 2022-04-08 13:07
      Status: 403
      Content-Type: text/plain; charset=utf-8
      Size: 13 B
    
  • 调用Microsoft365R::get_sharepoint_site("above url"),返回Need admin approval提示,无法完成认证。
失败原因说明
  • 第一种方案失败是因为SharePoint Online基于Azure AD做身份校验,不支持HTTP Basic基础认证,直接在请求里传明文账号密码无法通过校验,所以返回403。
  • 第二种方案失败是因为Microsoft365R默认的交互登录模式申请了租户级的应用权限,大部分企业租户会限制普通用户给这类高权限应用授权,因此触发管理员审批提示;但只要你个人账号本身有目标文件的访问权限,不需要管理员审批也可以完成认证。
可行实现方案

以下方案均不需要租户管理员权限,只要你的账号能正常在浏览器打开目标文件即可使用。

方案1:Cookie认证直读(最快,不需要额外配置)

操作步骤:

  • 浏览器登录企业SharePoint账号,正常打开目标xlsx的预览页面,按F12打开开发者工具,切换到「网络」面板,刷新页面,任意找一个发往xxxx.sharepoint.com域名的请求,复制请求头中完整的Cookie字段值。
  • 在文件预览页点击「下载」按钮,在网络面板里抓到download.aspx开头的请求,复制该请求的URL作为文件直链。
  • 运行以下代码读取文件:
library(httr)
library(readxl)

# 替换为你抓到的下载直链
download_url <- "替换为实际下载直链"
# 替换为你从浏览器复制的完整Cookie值
cookie <- "替换为实际Cookie内容"

# 发起请求下载文件二进制内容
resp <- GET(download_url, add_headers(Cookie = cookie))
# 写入临时文件
temp_xlsx <- tempfile(fileext = ".xlsx")
writeBin(content(resp, "raw"), temp_xlsx)
# 读取为data.frame
result_df <- read_excel(temp_xlsx)
# 删除临时文件
unlink(temp_xlsx)

注意:Cookie有固定有效期,失效后重新从浏览器复制替换即可,不需要调整其他代码。

方案2:Microsoft365R设备码登录(长期稳定,不需要反复复制Cookie)

操作步骤:

  • 不要直接传入完整的文件页URL调用get_sharepoint_site,先传入站点根地址,指定设备码认证模式:
library(Microsoft365R)
library(readxl)
# 站点地址填到sites/cqa层级即可
sharepoint_site <- get_sharepoint_site(
  site_url = "https://xxxx.sharepoint.com/sites/cqa/",
  auth_type = "device_code"
)
  • 运行代码后控制台会输出登录验证地址和设备码,在浏览器打开对应地址,输入设备码,用你的企业账号完成个人授权即可——这个流程只申请你个人账号的委托权限,不会触发租户级管理员审批要求。
  • 认证完成后,定位到目标文件读取即可:
# 获取站点默认文档库
drive <- sharepoint_site$get_drive()
# 替换为文件在文档库中的实际相对路径
target_file <- drive$get_item("xxxx/Updated LXXal Reqxxxxents for XXXXX XXXX Actixxxx.xlsx")
# 下载到临时文件读取
temp_xlsx <- tempfile(fileext = ".xlsx")
target_file$download(dest = temp_xlsx)
result_df <- read_excel(temp_xlsx)
unlink(temp_xlsx)

认证信息会存在本地缓存里,后续运行代码不需要重复登录。

方案3:共享链接改造法

如果不方便抓包,可以在SharePoint网页端选中目标文件,点击「共享」,生成组织内拥有查看权限的共享链接,把链接末尾的?web=1参数替换为?download=1,就得到了可直接下载的链接,后续可以结合Windows本地保存的SharePoint凭据,用curl::curl_download下载后读取,不需要手动复制Cookie。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.07 16:15:41