You need to enable JavaScript to run this app. 如何使用R读取本地部署(on premise)的SharePoint列表?
优惠活动
大模型
产品
解决方案
定价
更多

如何使用R读取本地部署(on premise)的SharePoint列表?

问题诊断
  • 所有失败方案的核心问题是没有调用SharePoint官方提供的结构化数据接口,直接请求前端渲染的列表页面URL,返回的本就是带特殊命名空间、自定义HTML属性的非结构化页面源码,自然会出现XML解析报错、拿到的内容是HTML源码的问题
  • 身份认证环节要么没有适配本地SharePoint的NTLM/AD认证规则,要么权限范围未覆盖列表数据读取权限,所以会出现401、无法打开连接的报错
正确读取方案

本地部署的SharePoint默认开放REST API接口,直接调用接口拉取结构化列表数据即可,无需解析前端页面,实现步骤如下:

  1. 前置准备:安装依赖包
    执行命令安装所需工具包:
    install.packages(c("httr", "jsonlite"))
  2. 构造请求地址
    将下列地址中的占位符替换为你的实际信息,得到接口请求地址:
    http://<你的SharePoint站点根地址>/_api/web/lists/getbytitle('<目标列表的显示名称>')/items?$top=5000
    注:$top=5000是单次请求拉取的最大数据量,超过5000条需要分页拉取
  3. 完整实现代码
# 加载依赖包
library(httr)
library(jsonlite)

# 配置基础信息,替换为实际值
sp_site_url <- "http://你的本地SharePoint站点根地址"
target_list_name <- "你的目标列表显示名"
ad_username <- "域\\用户名"
ad_password <- "你的账号密码"

# 拼接完整接口地址
api_url <- paste0(sp_site_url, 
                  "/_api/web/lists/getbytitle('", 
                  target_list_name, 
                  "')/items?$top=5000")

# 发起带NTLM认证的请求
resp <- GET(
  url = api_url,
  authenticate(user = ad_username, password = ad_password, type = "ntlm"),
  add_headers(Accept = "application/json;odata=nometadata")
)

# 解析结果
if (status_code(resp) == 200) {
  # 解析返回的json为数据框
  sp_list_df <- fromJSON(content(resp, as = "text", encoding = "UTF-8"))$value
  # 输出前几行验证
  head(sp_list_df)
} else {
  stop(paste("请求失败,状态码:", status_code(resp)))
}
注意事项
  • 如果本地SharePoint配置了Kerberos认证,将authenticate函数的type参数改为"negotiate"即可
  • 数据量超过5000条时,循环传入$skiptoken=ID=<上次最后一条数据的ID>参数即可实现分页拉取
  • 禁止直接请求列表的前端查看页面地址,必须调用/_api开头的官方接口才能拿到结构化数据

内容的提问来源于stack exchange,提问作者M八七

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 13:24:04