当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。