【问题标题】:How to send gs4_create() ouput directly to a googledrive folder如何将 ps4 create() 输出直接发送到谷歌驱动器文件夹
【发布时间】:2020-08-07 19:14:31
【问题描述】:

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

请参阅以下表示:

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 文件(批量)?

【问题讨论】:

    标签: r google-sheets google-api googlesheets4


    【解决方案1】:

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

    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”对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 2020-12-10
      相关资源
      最近更新 更多