使用R googlesheets包替换googlesheet的所有内容?

时间:2017-01-17 10:53:43

标签: r r-googlesheets

刚刚发现googlesheets包,到目前为止发现它非常有用。我现在希望能够替换现有工作表中的全部或部分内容。

示例:

> library(googlesheets) 
> set.seed(10)
> test1 <- data.frame(matrix(rnorm(10),nrow = 5))
> test1
       X1         X2
1  0.01874617  0.3897943
2 -0.18425254 -1.2080762
3 -1.37133055 -0.3636760
4 -0.59916772 -1.6266727
5  0.29454513 -0.2564784

> gs_new("foo_sheet", input = test1, trim = TRUE)

这会按预期创建一个新工作表。让我们说我们需要更新工作表(此数据用于shinyapps.io托管的闪亮应用程序,我宁愿不必重新部署应用程序以更改工作表引用)。

> test1$X2 <- NULL
> test1
       X1
1  0.01874617
2 -0.18425254
3 -1.37133055
4 -0.59916772
5  0.29454513

我尝试使用gs_new()覆盖,但遇到以下警告消息:

> gs_new("foo_sheet", input = test1, trim = TRUE)  

Warning message:
At least one sheet matching "foo_sheet" already exists, so you may
need to identify by key, not title, in future.

这会导致使用新的foo_sheet创建新工作表key,但不会替换现有工作表,因此如果我们尝试注册更新后会产生key错误表格

gs_title("foo_sheet")

Error in gs_lookup(., "sheet_title", verbose) : 
"foo_sheet" matches sheet_title for multiple sheets returned by gs_ls() (which should reflect user's Google Sheets home screen). Suggest you identify this sheet by unique key instead.

这意味着如果我们稍后尝试使用foo_sheet访问新工作表gs_read("foo_sheet"),API将返回原始工作表,而不是新工作表。

> df <- gs_read("foo_sheet")
> df
       X1         X2
1  0.01874617  0.3897943
2 -0.18425254 -1.2080762
3 -1.37133055 -0.3636760
4 -0.59916772 -1.6266727
5  0.29454513 -0.2564784

我的理解是,一种可能的解决方案可能是先用gs_delete("test1")删除工作表,然后再创建一个新工作表。或者,也许可以用gs_edit_cells()清空单元格,但希望有某种形式的覆盖函数。

提前致谢!

1 个答案:

答案 0 :(得分:2)

我发现编辑单元格功能是一个很好的解决方法:

gs_edit_cells(ss = "foo_sheet", ws = "worksheet name", input = test1, anchor = "A1" trim = TRUE, col_names = TRUE)

通过将数据锚定到左上角,您可以有效地覆盖所有其他数据。 trim函数将消除所有不更新的单元格。