R 填充上一行后,使用gs_edit_单元格递增到新行

R 填充上一行后,使用gs_edit_单元格递增到新行,r,google-sheets,shiny,R,Google Sheets,Shiny,我正在制作一个闪亮的应用程序,作为访客计数器。它从操作按钮中获取用户输入,然后用一个值表(日期、学期、游戏、计数)更新Google工作表。我可以填充输入的第一个值,但是我不太确定如何“递增”gs\u edit\u cells(),因为它只允许我指定一个特定的锚单元 我尝试过使用gs\u add\u row(),但是它与输入的维度不一致,因为它说它需要值为0?我在这里搜索了一下,因为这似乎是一个需要解决的小问题 服务器: 变量数据的格式为 data您可以使用gs\u add\u row()或gs\

我正在制作一个闪亮的应用程序,作为访客计数器。它从操作按钮中获取用户输入,然后用一个值表(日期、学期、游戏、计数)更新Google工作表。我可以填充输入的第一个值,但是我不太确定如何“递增”
gs\u edit\u cells()
,因为它只允许我指定一个特定的锚单元

我尝试过使用
gs\u add\u row()
,但是它与输入的维度不一致,因为它说它需要值为0?我在这里搜索了一下,因为这似乎是一个需要解决的小问题

服务器:

变量数据的格式为


data您可以使用
gs\u add\u row()
gs\u edit\u cells()
添加新行,但在这两种情况下,您之前必须至少添加一行和标题(例如,使用
gs\u edit\u cells()
)。在您的情况下,它们不起作用的原因不同:

1.gs_添加_行 函数的文档规定:

目前,此函数仅在具有正确的变量或列名标题行以及至少一个预先存在的数据行的工作表中工作

在您的情况下,它不起作用可能是因为您的电子表格没有标题。解决方案是在使用
gs\u add\u row()
之前,使用
gs\u edit\u cells()
创建第一行和标题信息

2.编辑单元格 您在
gs\u edit\u cells()
中使用了
anchor=“A1”
,因此每次从单元格A1更新电子表格时(因此,会覆盖以前的内容)。解决方案是读取电子表格的当前内容,以了解行数,并指定需要在不覆盖过去内容的情况下启动更新的单元格(请记住,标题填充电子表格中的一行)

示例代码(使用两种解决方案):


data您可以使用
gs\u add\u row()
gs\u edit\u cells()
添加新行,但在这两种情况下,您之前必须至少添加一行和标题(例如,使用
gs\u edit\u cells()
)。在您的情况下,它们不起作用的原因不同:

1.gs_添加_行 函数的文档规定:

目前,此函数仅在具有正确的变量或列名标题行以及至少一个预先存在的数据行的工作表中工作

在您的情况下,它不起作用可能是因为您的电子表格没有标题。解决方案是在使用
gs\u add\u row()
之前,使用
gs\u edit\u cells()
创建第一行和标题信息

2.编辑单元格 您在
gs\u edit\u cells()
中使用了
anchor=“A1”
,因此每次从单元格A1更新电子表格时(因此,会覆盖以前的内容)。解决方案是读取电子表格的当前内容,以了解行数,并指定需要在不覆盖过去内容的情况下启动更新的单元格(请记住,标题填充电子表格中的一行)

示例代码(使用两种解决方案):


数据感谢您的回复!我无意中使用了您的第一个解决方案,并且我错误地命名了
gs\u add\u row()
输入,因此现在它添加的很好!现在,我使用
gs\u edit\u cells()
作为标题。在为工作表创建新标题时,使用传递的表的列名称可以很好地工作,但是如果我查看单元格“A2”,它将始终是工作表中的最新条目,而它下面的每一行都将是以前的所有条目。是否有一种方法可以使
gs_edit_cells()
仅使用表格列名称合并,而不使用最新条目更新单元格A2?您的意思是是否可以只更改标题?是的(ish),我有:
gs_edit_cells(ss=sheet,ws=“2019”,input=head(data,5),anchor=“A1”,byrow=TRUE,verbose=TRUE,trim=FALSE)
通过此操作,我为工作表创建了标题,因为它从传递到函数中的TIBLE中获取列名。但是,每次它都会用最新的条目填充其下方的单元格A2。我希望它这样做,但没有填写在单元格中并覆盖它。如果除了通过工作表选项隐藏行之外,还有其他方法可以隐藏这一点,我很想知道,但是你已经回答了我的主要问题,这并不重要!谢谢你的回复!我无意中使用了您的第一个解决方案,并且我错误地命名了
gs\u add\u row()
输入,因此现在它添加的很好!现在,我使用
gs\u edit\u cells()
作为标题。在为工作表创建新标题时,使用传递的表的列名称可以很好地工作,但是如果我查看单元格“A2”,它将始终是工作表中的最新条目,而它下面的每一行都将是以前的所有条目。是否有一种方法可以使
gs_edit_cells()
仅使用表格列名称合并,而不使用最新条目更新单元格A2?您的意思是是否可以只更改标题?是的(ish),我有:
gs_edit_cells(ss=sheet,ws=“2019”,input=head(data,5),anchor=“A1”,byrow=TRUE,verbose=TRUE,trim=FALSE)
通过此操作,我为工作表创建了标题,因为它从传递到函数中的TIBLE中获取列名。但是,每次它都会用最新的条目填充其下方的单元格A2。我希望它这样做,但没有填写在单元格中并覆盖它。如果除了通过工作表选项隐藏行之外,还有其他方法可以隐藏这一点,我很想知道,但是你已经回答了我的主要问题,这并不重要!
saveData <- function(data) {
  # Grab the google sheet
  table <- gs_title("Game_Table")

  show(data)
  gs_edit_cells(ss = table, 
                ws = 1, 
                input = data,
                anchor = "A1", 
                byrow = TRUE, 
                col_names = FALSE, 
                trim = TRUE)
}
data <- data.frame(date = 17905, semester = "Fall", games = "Table Tennis", num = 7)
new_data <- data.frame(date = 17905, semester = "Fall", games = "Table Tennis", num = 7)

# Grab the google sheet
table <- gs_title("Game_Table")

# save first row of data with header (run only one time)
gs_edit_cells(ss = table, 
              ws = 1, 
              input = data,
              anchor = "A1", 
              byrow = TRUE, 
              trim = TRUE)

# solution 1: add new rows with gs_add_rows
table <- gs_title("Game_Table")
gs_add_row(ss = table, input = new_data)

# solution 2: add new rows with gs_edit_cells
table <- gs_title("Game_Table")
last_row <- nrow(gs_read(table))
gs_edit_cells(ss = table, 
              ws = 1, 
              input = new_data,
              anchor = paste0("A",last_row+2), 
              byrow = TRUE, 
              col_names = FALSE, 
              trim = TRUE)