0

我正在尝试使用新的 R googlesheets4 包使用函数上传数百个 googlesheets gs4_create。我可以在谷歌驱动器的根目录中成功上传文件,但看不到如何将其发送到谷歌驱动器上预先存在的文件夹中。

请参阅以下代表:

df <- data.frame(a=1:10,b=letters[1:10])
googlesheets4:: gs4_create(name="TEST_FOLDER/testsheet",sheets=df)

"TEST_FOLDER/testsheet它在根文件夹中创建一个名为 :的文件。

虽然我想在 TEST_FOLDER 中创建文件

我知道我可以write_sheet()在文件夹中预先存在的文件上使用,但我想创建新文件,而不是写入预先存在的文件。我也知道这googledrive::drive_upload()将允许我上传 csv 文件,但我不喜欢上传 csv 文件时的格式,因为它们是纯文本表,第一行没有冻结。这只能通过 googlesheets4 包实现。所以回到我的问题:

如何在 TEST_FOLDER 中创建 googlesheet 文件(批量)?

4

1 回答 1

0

首先,您必须使用 googledrive 包创建一个drive_mkdir(name = "TEST_FOLDER")文件。创建它后,我建议您使用文件夹和文件的 ID。因此,查找 id 的下一步将是:

folder_id <- drive_find(n_max = 10, pattern = "TEST_FOLDER")$id

*如果您的 Google 云端硬盘中只有一个名为 TEST_FOLDER 的文件夹,则此方法有效。如果您有多个,我建议您直接复制/粘贴 id,或者在分配给“folder_id”对象之前识别您想要的 id。

*如果您不想执行此步骤,您也可以直接从 Google Drive url 复制/粘贴 id

拥有它后,您可以编写一个 for 循环来上传所有文件。例如,假设您的工作表名为 sheet1、sheet2... sheet10:

a <- rep("sheet",10)
b <- 1:10
names <- paste0(a,b)

for(x in names){
   
   gs4_create(name = x, sheets = list(sheet1 = get(x)))
   
   sheet_id <- drive_find(type = "spreadsheet", n_max = 10, 
                          pattern = x)$id

   sheet_id <- drive_find(type = "spreadsheet", n_max = 10, 
                          pattern = x)$id

   drive_mv(file = as_id(sheet_id), path = as_id(folder_id))

}

注意:如果您的 Google Drive 根文件夹中的文件过多,则 mkdir 函数将花费太多时间。这就是为什么我建议使用 ids。如果您遇到此问题,您可以手动创建此文件夹,复制 id 并将其分配给“folder_id”对象。

于 2020-08-11T07:26:22.947 回答