使用 R googlesheets 包替换 googlesheet 的所有内容?
Replace all contents of a googlesheet using R googlesheets package?
刚刚发现 googlesheets 包,并且发现它到目前为止非常有用。我现在希望能够替换现有 sheet.
中的全部内容或部分内容
示例:
> 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)
这会按预期创建一个新的 sheet。假设我们需要更新 sheet(此数据用于 shinyapps.io 托管的闪亮应用程序,我希望不必重新部署应用程序即可更改 sheet参考)。
> 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.
这会导致使用新的 key
创建新的 sheet foo_sheet
,但不会替换现有的 sheet,因此会生成 key
如果我们尝试用
注册更新的 sheet 错误
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.
这意味着如果我们稍后尝试使用 gs_read("foo_sheet")
访问新的 sheet foo_sheet
,API 将 return 原始 sheet,而不是新的。
> 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
据我了解,一种可能的解决方案是先删除 sheet 和 gs_delete("test1")
,然后创建一个新的。或者,可以使用 gs_edit_cells()
清空单元格,但希望有某种形式的覆盖功能。
提前致谢!
我发现编辑单元格功能是一个很好的解决方法:
gs_edit_cells(ss = "foo_sheet", ws = "worksheet name", input = test1, anchor = "A1" trim = TRUE, col_names = TRUE)
通过将数据锚定到左上角,您可以有效地覆盖所有其他数据。 trim 函数将消除所有不更新的单元格。
刚刚发现 googlesheets 包,并且发现它到目前为止非常有用。我现在希望能够替换现有 sheet.
中的全部内容或部分内容示例:
> 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)
这会按预期创建一个新的 sheet。假设我们需要更新 sheet(此数据用于 shinyapps.io 托管的闪亮应用程序,我希望不必重新部署应用程序即可更改 sheet参考)。
> 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.
这会导致使用新的 key
创建新的 sheet foo_sheet
,但不会替换现有的 sheet,因此会生成 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.
这意味着如果我们稍后尝试使用 gs_read("foo_sheet")
访问新的 sheet foo_sheet
,API 将 return 原始 sheet,而不是新的。
> 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
据我了解,一种可能的解决方案是先删除 sheet 和 gs_delete("test1")
,然后创建一个新的。或者,可以使用 gs_edit_cells()
清空单元格,但希望有某种形式的覆盖功能。
提前致谢!
我发现编辑单元格功能是一个很好的解决方法:
gs_edit_cells(ss = "foo_sheet", ws = "worksheet name", input = test1, anchor = "A1" trim = TRUE, col_names = TRUE)
通过将数据锚定到左上角,您可以有效地覆盖所有其他数据。 trim 函数将消除所有不更新的单元格。