我正在尝试编写一个 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")
这似乎已连接(尽管用户名和密码似乎并不重要)并返回
> 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}&file=MyFile.xlsx&action=default\">here</a>.</h2>\r\n</body></html>\r\n"`
但是,我不确定此时该做什么,或者即使我走在正确的轨道上。 任何帮助将不胜感激。
我用
library(readxl)
read_excel('//companySharepointSite/project/.../ExcelFilename.xlsx', 'Sheet1', skip=1)
注意,没有
https:
,有时我必须先打开文件(即将 //companySharepointSite/project/.../ExcelFilename.xlsx
剪切并粘贴到浏览器的地址栏)
我发现其他答案对我不起作用,也许是因为我使用的是 Mac,它显然不能与 Sharepoint 等 Microsoft 产品一起使用。
最终不得不将其分成两部分:首先将 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")
这完成了工作,但如果有人知道如何避免写入磁盘的临时步骤,我会很感兴趣。
注意根据您的特定计算机/网络/Sharepoint 配置,您也可以仅使用
authenticate(":",":","ntlm")
每个此答案。
我无法使用 R 中上述答案的提示来完成此任务(我尝试了在该网站上找到的许多方法)。然而,只是为了强调上面 @RyanBradley 的回应,特别是 @ZS27 的回应:
我不得不使用 OneDrive 桌面客户端(Windows)来允许我将文件夹
sync
添加到我的计算机上。较新版本的 SharePoint(如 MS Teams 中的版本)在与 OneDrive 交互的文档库/文件夹中具有 sync
按钮或功能。
这相当于将文件夹安装为网络驱动器的功能,因此 R 与该文件交互,就好像它是文件系统的一部分一样。对我有用。
我的情况和你一模一样。我想使用 R 编程语言访问共享点网站上的 Excel 文件。
我也上网查了很多资料,但没有找到符合我要求的东西。
然后,我尝试了以下事情: 我已将共享点文件夹作为本地系统中的网络驱动器文件夹。
然后,我从我的计算机访问了该 Excel 文件(在共享点站点中),而无需访问 Web 浏览器。
因此,我复制了系统中存在的网络路径(它将与您的共享点站点相同,但它不会有 https/http。 该网站将以“\”开头,如下所示:“\sharepoint.test.com old\path”)。
启动 RStudio 并选择环境部分下的导入数据集选项。
选择“从 Excel”。 “导入 Excel 数据”表单将打开。
在文件/URL 字段下:粘贴 sharepoint 的网络路径(从您的计算机复制)。
点击导入,Sharepoint中的excel文件将成功导入到R中。
确保文件不应以 html 语言作为输入(如 %20 等),并且应在 URL 中使用反斜杠作为分隔符。 导入文件时,请准确输入文件夹名称,如您所见。
例如: Sharepoint.microsoft.com - Sharepoint 的域 部门名称 - 文件夹名称 项目名称 - 文件夹名称 Sample.xlsx - 文件名 因此,您导入数据集的 URL 应该是:
“\Sharepoint.microsoft.com\部门名称\项目名称\Sample.xlsx”。
谢谢!
我最近使用 Microsoft365R 包从我公司的共享点下载了一个文件,该包有助于通过浏览器进行身份验证。
第一行代码,
get_business_onedrive()
在我的浏览器中打开了一个新选项卡。我短暂地看到了 Windows 登录屏幕,然后它重新使用了我当天早些时候的身份验证。然后该网站显示:“已通过 Azure Active Directory 进行身份验证。请关闭此页面并返回 R。”
我返回R直接将文件下载到我的工作中,将相关数据作为对象读取到我的环境中,然后直接从工作中删除该文件。
理想情况下,会有一种方法可以跳过下载部分,正如 Nick Kastango 在另一篇文章中提到的那样。我使用公司常用的浏览器进行身份验证。我特别不想将我的团队驱动器映射到本地 onedrive,因为我希望有权访问该文件的同事能够使用该脚本,而不要将文件映射到本地驱动器。相反,他们将使用脚本并使用自己的凭据登录。
# load relevant packages
library(Microsoft365R) #for accessing onedrive
library(readxl) #for reading excel files
get_business_onedrive() #I ran this first and the browser logged me in
list_sharepoint_sites() #list my teams in the Rstudio console
site <- get_sharepoint_site("MyTeamName") #written exactly as it was listed in the console
site$list_drives() #list the various drive libraries, like "documents" and "wiki"
drv <- site$get_drive()# default is the document library, so I didn't need to specify anything
#downloads the file to the project working directory
drv$download_file("foldername/filename.xlsx")
# Review the sheet names in order to select the correct one.
excel_sheets("filename.xlsx")
#read the dataframe to my Rstudio environment
df <-read_excel("filename.xlsx",
sheet = "sheetname")
#Removes the file from my working directory. I don't want the downloaded excel file to stay. I always want to be working with the current version of the spreadsheet.
file.remove("filename.xlsx")
您可能需要将网络驱动器映射到 SharePoint 库,以便可以直接连接到它。或者,如果您不想映射网络驱动器,您也可以在启动文件夹中放置该文件夹的快捷方式。
示例文件路径: