使用 R 从 Sharepoint 访问 Excel 文件

Accessing Excel file from Sharepoint with R

我正在尝试编写一个 R 脚本来访问存储在我公司的 Sharepoint 页面上的 Excel 文件,以便我可以进行一些计算并绘制结果。我已经尝试了多种方法来做到这一点(download.file、RCurl getURL()、gdata),但我似乎无法弄清楚如何做到这一点。 url 是 HTTPS,应该需要用户名和密码。我最接近这个代码:

require(RCurl)
URL<-"https://companyname.sharepoint.com/sites/folder/_layouts/15/WopiFrame.aspx?sourcedoc={2DCC2ED7-1C13-4910-AFAD-4A9ACFF1C797}&file=myfile.xlsx&action=default'  
f<-getURL(URL,verbose=T,ssl.verifyhost=F,ssl.verifypeer=F,userpwd="mylogin:mypw") 

这似乎连接(虽然用户名和密码似乎无关紧要)和returns

> f  
[1] "<html><head><title>Object moved</title></head><body>\r\n<h2>Object moved to <a href=\"https://companyname.sharepoint.com/sites/_layouts/15/WopiFrame2.aspx?sourcedoc={2DCC2ED7-1C13-4910-AFAD-4A9ACFF1C797}&amp;file=MyFile.xlsx&amp;action=default\">here</a>.</h2>\r\n</body></html>\r\n"`

但是,我不确定此时该做什么,或者即使我在正确的轨道上。任何帮助将不胜感激。

尝试使用这种格式的 link: http://site/_layouts/download.aspx?SourceUrl=url-of-document-in-library

我用

library(readxl)
read_excel('//companySharepointSite/project/.../ExcelFilename.xlsx', 'Sheet1', skip=1)

注意,没有 https:,有时我必须先打开文件(即,将 //companySharepointSite/project/.../ExcelFilename.xlsx 剪切并粘贴到浏览器的地址栏中)

您可能需要将网络驱动器映射到 SharePoint 库,以便您可以直接连接到它。或者,如果您不想映射网络驱动器,您也可以在启动文件夹中放置该文件夹的快捷方式。

示例文件路径: \company_sharepoint_site\ssp\site_name\sub_site_name\library_name

示例启动文件夹位置 (Windows 10): C:\Users\USER_NAME\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup

请注意斜杠的方向(“\”而不是“/”)很重要,这样您的文件路径就会被解释为文件位置,而不是 Internet 浏览器位置。通过将这样的路径放在网络驱动器中或作为启动文件夹中的快捷方式,您的 PC 应该在启动时连接到它。

 # Load or install readxl
if(require(readxl) == FALSE){
  install.packages("readxl")
  if(require(readxl)== FALSE){stop("Unable to install and load readxl")}
}

# Define path to data 
data_path <- "\\company_sharepoint_site\ssp\site_name\sub_site_name\library_name\Example.xlsx"

# Pull data
df_employees <- read_xlsx(data_path)

我的情况和你一模一样。我想访问一个 excel 文件,该文件可在使用 R 编程语言的共享点网站上获得。

我也上网查了很多东西,没有找到符合我要求的东西。

然后,我尝试了以下操作: 我在本地系统中将共享点文件夹设为网络驱动器文件夹。

然后,我在没有访问网络浏览器的情况下从我的机器访问了 excel 文件(在共享点站点中)。

因此,我复制了系统中存在的网络路径(它将与您的共享点站点相同,但不会有 https/http。 该站点将以“\”开头,如下所示:“\sharepoint.test.com\folder\path”).

启动 RStudio 和 select 导入数据集选项,在环境部分下。

选择'From Excel'。 'Import Excel Data' 表格将被打开。

在File/URL字段下:粘贴sharepoint的网络路径(从您的机器复制)。

点击导入,Sharepoint中的excel文件将成功导入R中。

确保文件不应该有 html 语言作为输入(谎言 %20 和所有)并且在 URL.[=38 中应该使用反斜杠作为分隔符=] 导入文件时,请准确输入文件夹名称,如您所见。

例如: Sharepoint.microsoft.com - Sharepoint 的域 部门名称 - 文件夹名称 项目名称-文件夹名称 Sample.xlsx - 文件名 因此,您要导入数据集的 URL 应该是:

"\Sharepoint.microsoft.com\Department name\Project name\Sample.xlsx".

谢谢!

我发现其他答案对我不起作用,也许是因为我在 Mac 上,这显然不能很好地与 Microsoft 产品(如 Sharepoint)一起播放。

最终不得不将其分成两部分:首先将 Excel 文件下载到磁盘,然后单独读取 Excel 文件。

library(httr)
library(readxl)

# the URL of your sharepoint file
file_url <- "https://yoursharepointsite/Documents/yourfile.xlsx"

# save the excel file to disk
GET(file_url, 
    authenticate(active_directory_username, active_directory_password, "ntlm"),
    write_disk("tempfile.xlsx", overwrite = TRUE))

# save to dataframe
df <- read_excel("tempfile.xlsx")
df

# remove excel file from disk
file.remove("tempfile.xlsx")

这就完成了工作,但如果有人知道如何避免写入磁盘的中间步骤,将会很感兴趣。

N.B。根据您的特定 machine/network/Sharepoint 配置,您也可以只使用 authenticate(":",":","ntlm") 每个 this answer.

我无法使用 R 中上述答案的提示来完成此操作(我尝试了在此站点上找到的许多方法)。但是,只是为了强调上面@RyanBradley 的回复,尤其是@ZS27 的回复:

我不得不使用 OneDrive 桌面客户端 (Windows) 以允许我 sync 将文件夹复制到我的计算机。较新版本的 SharePoint(如 MS Teams 中的版本)在与 OneDrive 交互的文档库/文件夹中有一个 sync 按钮或功能。

这在功能上相当于将文件夹安装为网络驱动器,因此 R 与文件交互,就好像它是文件系统的一部分一样。适合我。

如果上述方法不起作用,请尝试使用此语法[注意斜杠方向]:

"\\gov.sharepoint.com@SSL/DavWWWRoot/sites/SomePath/SomePath/SomePath/SomeFile"

有关语法和正在发生的事情的更多信息,请参阅此内容: