首页 > 解决方案 > Google Sheet 脚本未完全执行

问题描述

我正在使用 Google 表单来触发此脚本。
当我使用 Play 按钮运行脚本时,它运行良好。
当我让 onsubmit 触发器运行它时,复选框会很好地填充,但 setValue 日期不会。
我也尝试过使用setFormula,但我得到了相同的结果。

function AddCheckBox_toSchoolLunchForm(F) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1")
  var criteria = SpreadsheetApp.DataValidationCriteria.CHECKBOX;
  var rule = SpreadsheetApp.newDataValidation().requireCheckbox().build();
  var range = sheet.getRange(sheet.getLastRow(), 8);
  range.clearContent();
  range.setDataValidation(rule);
  var FormulaCell = sheet.getRange(sheet.getLastRow(), 10);
  FormulaCell.setFormula("=DATEVALUE(A" + (sheet.getLastRow()) + ")");
}

手动代码运行的结果示例

触发代码运行的结果示例

最终目标是让 J 列在每次提交表单时使用 A 列中的镜头格式日期填充。
我需要这种格式才能在另一张纸上运行 countIfs。

另一种选择是以某种方式将格式标记嵌入到此 CountIfs 命令中,以便它们匹配。

=COUNTIFS('Form Responses 1'!J:J,A2,'Form Responses 1'!D:D,B2)

标签: google-apps-scriptgoogle-sheetstriggersgoogle-forms

解决方案


更新的答案

如果在没有触发器的情况下按预期工作时在触发器上运行函数时遇到问题,请检查以下内容:

  • 对于繁重的文件/表单数据,它们可能会延迟使用新表单数据填充工作表。

    • 为避免冲突,请在检索sheet.getLastRow()或访问工作表中的数据之前给电子表格一些时间来填充新行。

    • 您可以使用Utilities.sleep()轻松打点。

  • 检查您的触发器是否已正确安装。为此检查

    • 触发器的类型是正确的
    • 触发器绑定到正确的函数
    • 通过在重命名函数时创建新触发器来避免冲突。
  • 检查问题不是由于触发限制

  • 这是使用简单触发器时的常见错误源。

  • 检查触发器在其授权下运行的帐户是否有权编辑工作表/范围。这对于检查触发器所有者何时与手动运行脚本的人不同非常重要。

  • 请注意,setFormula()没有必要将 合并=到公式中

  • 请注意,DATEVALUE()仅当单元格正确格式化为日期时才会返回预期结果


推荐阅读