當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R googlesheets4 range_write (覆蓋)將新數據寫入範圍


將數據幀寫入一係列單元格中。與sheet_write()(又名write_sheet())的主要區別:

  • 範圍更窄。 range_write() 實際上是針對一些單元格,而不是整個(工作)表。

  • 編輯的矩形未明確設置為表格樣式。沒有做任何特別的事情:格式化標題行或凍結行。

  • 列名可以被隱藏。這意味著,雖然data必須是一個數據幀(至少目前如此),但range_write()實際上可以用來寫入任意數據。

  • 目標(跨頁)表和(工作)表必須已存在。無法創建工作表或添加工作表。

  • 目標圖紙尺寸不是 "trimmed" 到 shrink-wrap 和 data 。但是,工作表可能會增加行和/或列,以便將 data 寫入用戶指定的 range

如果您隻想向現有表添加行,您可能需要的函數是 sheet_append()

用法

range_write(
  ss,
  data,
  sheet = NULL,
  range = NULL,
  col_names = TRUE,
  reformat = TRUE
)

參數

ss

識別 Google 表格的內容:

  • 其文件 ID 作為字符串或 drive_id

  • 我們可以從中恢複 id 的 URL

  • one-row dribble ,這就是 googledrive 表示雲端硬盤文件的方式

  • googlesheets4_spreadsheet 的實例,這就是 gs4_get() 返回的內容

通過 as_sheets_id() 處理。

data

一個 DataFrame 。

sheet

要寫入的表,在 "worksheet" 或 "tab" 的意義上。您可以通過名稱(使用字符串)或位置(使用數字)來標識工作表。如果通過 range 指定工作表,則忽略。如果兩個參數都沒有指定工作表,則默認為第一個可見工作表。

range

寫在哪裏。這個 range 參數與其他地方的 range (例如 range_read() )有重要的相似之處和不同之處:

  • 相似之處:可以是單元格範圍,使用 A1 表示法 ("A1:D3") 或使用 cell-specification 中的幫助程序。可以組合工作表名稱和單元格範圍 ("Sheet1!A5:A") 或按名稱引用工作表( range = "Sheet1" ,盡管為了清晰起見,首選 sheet = "Sheet1" )。

  • 區別:不能是命名範圍。

  • 區別:range 可以解釋為目標矩形的起點(左上角),或者更確切地說,解釋為實際的目標矩形。有關詳細信息,請參閱"Range specification" 部分。

col_names

邏輯,表示是否發送 data 的列名。

reformat

邏輯,指示是否重新格式化受影響的單元格。目前 googlesheets4 不提供對格式的真正支持,因此 reformat = TRUE 實際上意味著編輯的單元格變為未格式化。

輸入 ss ,作為 sheets_id 的實例

範圍規格

range_write()range 參數很特殊,因為 Sheets API 可以通過兩種不同的方式實現它:

  • 如果range恰好代表1個單元格,如"B3",則將其作為目標單元格矩形的起點(或左上角)。編輯的單元格由我們正在編寫的 data 的範圍隱式確定。這使您無需根據 data 的尺寸進行繁瑣的範圍計算。

  • 如果 range 說明了一個包含多個單元格的矩形,則它將被解釋為要編輯的實際矩形。可以說明一個在右側(例如"B2:4")、在底部(例如"A4:C")或在右側和底部(例如cell_limits(c(2, 3), c(NA, NA)))無邊界的矩形。請注意,矩形內的所有單元格重要提示:如果 data 對象不夠大,無法填充目標矩形,則未接收新數據的單元格將被有效清除,即刪除現有的值和格式。

也可以看看

如果需要更改紙張尺寸,請創建 UpdateSheetPropertiesRequest

主要數據寫入是通過 UpdateCellsRequest 完成的:

其他寫入函數:gs4_create()gs4_formula()range_delete()range_flood()sheet_append()sheet_write()

例子

# create a Sheet with some initial, empty (work)sheets
(ss <- gs4_create("range-write-demo", sheets = c("alpha", "beta")))
#> ✔ Creating new Sheet: range-write-demo.
#> 
#> ── <googlesheets4_spreadsheet> ───────────────────────────────────────────
#> Spreadsheet name: range-write-demo                            
#>               ID: 1Ct5y25RxCDJMqinkokSc2oLTF_Y5QqLj8h1_gEEiGMw
#>           Locale: en_US                                       
#>        Time zone: Etc/GMT                                     
#>      # of sheets: 2                                           
#> 
#> ── <sheets> ──────────────────────────────────────────────────────────────
#> (Sheet name): (Nominal extent in rows x columns)
#>        alpha: 1000 x 26
#>         beta: 1000 x 26

df <- data.frame(
  x = 1:3,
  y = letters[1:3]
)

#  write df somewhere other than the "upper left corner"
range_write(ss, data = df, range = "D6")
#> ✔ Editing range-write-demo.
#> ✔ Writing to sheet alpha.

# view your magnificent creation in the browser
gs4_browse(ss)

# send data of disparate types to a 1-row rectangle
dat <- tibble::tibble(
  string = "string",
  logical = TRUE,
  datetime = Sys.time()
)
range_write(ss, data = dat, sheet = "beta", col_names = FALSE)
#> ✔ Editing range-write-demo.
#> ✔ Writing to sheet beta.

# send data of disparate types to a 1-column rectangle
dat <- tibble::tibble(
  x = list(Sys.time(), FALSE, "string")
)
range_write(ss, data = dat, range = "beta!C5", col_names = FALSE)
#> ✔ Editing range-write-demo.
#> ✔ Writing to sheet beta.

# clean up
gs4_find("range-write-demo") %>%
  googledrive::drive_trash()
#> File trashed:
#> • range-write-demo <id: 1Ct5y25RxCDJMqinkokSc2oLTF_Y5QqLj8h1_gEEiGMw>
源代碼:R/range_write.R

相關用法


注:本文由純淨天空篩選整理自Jennifer Bryan等大神的英文原創作品 (Over)write new data into a range。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。