如何在运行脚本之前提交活动单元格中所做的更改? (Google 表格/Google Apps 脚本)

2024-05-18

我正在使用 Google Apps 脚本在 Google 表格中创建提交表单。该表单位于一页上,提交内容被移至第二个隐藏页面。当用户填写表单后,他们按下提交页面上的按钮以激活脚本。

我遇到的问题是,当用户填写最后一个单元格然后单击按钮时,输入最后一个单元格的数据似乎尚未提交到页面,因此不会被脚本(使用sheet_sub.getRange("C7").getValue();)。我尝试过了activate()另一个细胞和flush(),但这似乎不起作用。关于脚本的其他所有内容都是有效的。

如何确保数据保存到工作表中以便我可以访问它?预先感谢您的帮助。

编辑:包括下面的代码

function submitNomination() {
  var sheet_sub = getSheet("Submission Form");
  var sheet_list = getSheet("List of Nominations");

  // Find last row in list
  var lastRow = sheet_list.getRange("A1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();

  // Grab values from submission form
  var nominee = sheet_sub.getRange("C5:F5").getValue();
  var nominator = sheet_sub.getRange("C6:F6").getValue();
  var category = sheet_sub.getRange("C7:F7").getValue();
  var reason = sheet_sub.getRange("C8:F12").getValue();
  
  // Enter values into the list
  sheet_list.getRange('R'+(lastRow+1)+'C1').setValue(Utilities.formatDate(new Date(), "America/Detroit","yyyy-MM-dd HH:mm:ss"));
  sheet_list.getRange('R'+(lastRow+1)+'C2').setValue(nominee);
  sheet_list.getRange('R'+(lastRow+1)+'C3').setValue(nominator);
  sheet_list.getRange('R'+(lastRow+1)+'C4').setValue(reason);
  sheet_list.getRange('R'+(lastRow+1)+'C5').setValue(category);

  // Clear submission form
  sheet_sub.getRange("C5:F12").clearContent();

}

function getSheet(sheetName){
  var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
  return sheet;
}

只要最后一个单元格的值未提交,它就仅存在于用户浏览器会话的客户端上,并且无法从 Google Sheets/Apps 脚本或 Sheets API 中检索

想想使用同一个电子表格的用户。在用户 A 提交更改之前,用户 B 将不会在他的电子表格版本中看到这些更改,也无权提交这些更改。

因此,如果您希望用户在单击按钮时可以检索修改,唯一的方法是在按下按钮之前提示用户提交更改。你可以这样做,例如单击按钮上会显示一条警报/消息,询问用户是否在单击按钮之前提交了更改。

或者,您可以考虑没有按钮的实现。

例如,您可以将脚本发布为WebApp https://developers.google.com/apps-script/guides/web并将 WebApp Url 的超链接粘贴到充当按钮的单元格中:

这可能看起来不如实际按钮美观,但是通过单击按钮单元格,用户最后的更改将自动提交。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在运行脚本之前提交活动单元格中所做的更改? (Google 表格/Google Apps 脚本) 的相关文章

随机推荐