3

这可能是一个非常简单的问题,但我似乎无法弄清楚。我们最近将一个项目从 Google 云端硬盘上的共享文件夹移到了团队云端硬盘。我曾经使用以下代码直接从 R 访问电子表格:

library(googlesheets)
mydir <- gs_ls() #authenticate to google list sheets
mydir$sheet_title
mygs <- gs_title(x = "FileName", verbose = F) #read file
mygs <- gs_read(ss = mygs, ws = "SheetName", skip=1) # get specific worksheet

但是现在我们移动了项目,它不再工作了,因为 googlesheets 包只适用于我的 Google Drive 目录。我找到了一个用于访问我的团队驱动器(googledrive)的包,并且我设法在目录中找到了该文件,但我似乎无法弄清楚如何阅读我的特定工作表:

library(googledrive)
td <- team_drive_find()
myfile <- drive_find(team_drive = as_id(td$id[td$name=="TDriveName"]),
                     pattern = "FileName")
myfile <- drive_get(id = as_id(myfile$id), verbose = TRUE)

这让我对电子表格的元数据有了一点了解,而不是像 gs_title() 这样的实际电子表格。必须有一个功能来做到这一点吗?

4

2 回答 2

6

这是目前正在进行的重新启动 googlesheets 包(称为 googlesheets4)的工作,该包尚未在 CRAN 上发布。

但是,您目前可以通过结合使用 googlesheets 包和 googledrive 包来实现您想要的,正如您在上面所说的那样。

首先,您必须使用 获取特定电子表格的元数据drive_get,并通过名称或 ID 或 URL 指定团队驱动器。然后,使用 googlesheets 包中的任何函数注册电子表格,即gs_titlegs_keygs_url

这里的解决方法是设置参数lookup = FALSEvisibility = "private"gs_key.

我更喜欢使用团队驱动器 ID 和电子表格密钥,而不是名称。您可以使用它team_drive_find来获取团队驱动器的 ID。

见下文:

library(dplyr)   # For pipe operator, %>%
library(googledrive)
library(googlesheets)

data <- 
  drive_get(path = "example-googlesheet-name",
          team_drive = as_id("0ABCDefGH2jK_Lm3NPA")) %>% 
  select(id) %>% 
  combine() %>% 
  gs_key(lookup = FALSE, 
         visibility = "private") %>% 
  gs_read_csv()

上面的代码通过团队驱动器的 ID 从团队驱动器中读取示例电子表格。从 返回的元数据中drive_get,它选择 ID,将其组合成一个向量,并将 ID 传递gs_key给注册电子表格。 gs_read_csv然后读入寄存器电子表格并将结果分配给data.

有关更多信息,请参阅这些 Github 问题:

https://github.com/jennybc/googlesheets/issues/327

https://github.com/jennybc/googlesheets/pull/318

于 2018-12-21T13:38:41.397 回答
0

它已经发布,目前还没有解决这个问题的办法。解决方法:移回您自己的驱动器或创建一个可供所有团队访问的共享 gmail 帐户,然后与该帐户协作。

于 2018-12-18T09:42:29.890 回答