【问题标题】:How to add date to empty cell by default if none specified in Google Form, on form submit with App Script?如果 Google 表单中未指定日期,如何在使用 App 脚本提交表单时默认将日期添加到空单元格?
【发布时间】:2016-12-20 10:13:17
【问题描述】:

我有一个时间日志表单,其中包含一个我不想每次都填写的日期字段,因为 90% 的时间是今天的日期。 (有时您会输入另一天的内容并需要更改)。

当一个条目被添加时,A列总是会有一些东西,所以它应该检查A是否为空,如果相同的行D为空,它会将今天的日期输入到D中。

我看过的一些示例是用于 onEdit 的单元格更改它,但我无法让它与表单提交一起使用,甚至无法让它自动检查 D 中的所有单元格,如果为空则输入今天的日期(仅当 B 有值时)。

我现在有一个对表单进行排序的函数,当表单提交/onEdit 发生时调用该函数,并且希望将新公式粘贴在同一个公式的底部(除非这是不好的做法)。这样做的原因是需要添加到触发器列表中的函数更少。

A:时间戳 | B: 什么 | C:付费的? | D:日期

【问题讨论】:

  • 嗨,戴维,您能添加一些与您的描述相关的代码 sn-p 吗?
  • 嘿,我没有发布任何相关代码,因为我半工作的所有东西都感觉不对,不想让人们感到困惑。今天下班后我会再试一次并发布一些代码。该函数的基础是有一个从触发器 onEdit、onFormSubmit 调用的函数(现在我考虑一下可能只是 onFormSubmit 工作)- D 列中的单元格是空的 && A 列中的此行单元格是空的吗?然后将今天的日期放在 D 列的单元格中。如您所知,我可以描述它,但仍然无法编写自己的自定义函数。希望这种情况很快会改变

标签: google-apps-script google-sheets google-forms


【解决方案1】:

您可以尝试使用 Google 表格提供的 Google spreadsheets function list 中的 Date

而且,正如Custom Functions in Google Sheets 中所述,如果可用函数不足以满足您的需求,您还可以使用 Google Apps 脚本编写自定义函数,然后在 Google 表格中使用它们,就像内置函数一样。

要开始使用,可以在给定的文档中找到自定义函数和示例的指南。

【讨论】:

  • 使用函数/自定义的问题是,一旦提交表单响应,它基本上会创建一个新行,而没有 Google 表格中的任何格式。我发现向列添加功能不适用于新条目,它需要应用脚本来编辑任何新添加的表单行(我可能完全错了,但这是我经过数小时的挫折后得出的结论首次使用表格/表单时)
【解决方案2】:

您可以使用带有onFormSubmit 触发器的 Google Apps 脚本,该触发器将使用默认日期填充所述单元格。

这是一个示例代码,它将在相关行的第 4 列中填充当前日期。

function onFormSubmit(e) {
  //edit responses sheet name
  var responseSheetName = 'Form Responses 2';
  //Edit colmn number, column in which the date has to be autopopulated
  var column = 4;

  //Get target row number
  var row = e.range.rowStart;
  //If no date, pouplate the cell with current date
  if(!e.values[column-1]){
    SpreadsheetApp.getActive().getSheetByName(responseSheetName).getRange(row, column).setValue(new Date())
  }
}

为了设置上述代码,请打开包含表单响应的电子表格。转到工具 > 脚本编辑器。这将打开脚本编辑器窗口。粘贴上面的代码并编辑 responseSheetNamecolumn 。现在保存它。 保存后,设置表单提交触发器。

要设置触发器,请按以下步骤操作。

  1. 从脚本编辑器中,选择资源 > 当前项目的触发器。
  2. 单击显示:未设置触发器的链接。点击此处立即添加。
  3. 在 Run 下,选择您要触发的函数 onFormSubmit 的名称。
  4. 在事件下,选择从电子表格
  5. 选择在表单提交时
  6. (可选)单击通知以配置在触发功能失败时通过电子邮件与您联系的方式和时间。
  7. 点击保存。

【讨论】:

  • 这太接近了,有没有办法定位最后添加的行或所有空行?我有另一个函数可以根据多列对所有内容进行排序,因此新条目永远不会是第一项或最后一项。
  • 我还有 2 列数据验证下拉菜单,这些下拉菜单位于每一行到底部,导致最后一行为 1000+(不过可能有更好的方法)
  • 我建议不要在表单提交表中编辑/排序/添加下拉列表。提交数据后,您只需将数据复制到另一张表中,然后做任何您需要做的事情,否则,您的表单提交可能会以意想不到的方式表现。
  • 我遇到的问题是我需要在提交数据后立即编辑提交的数据。示例:我将其用作日间日志。在输入日期、时间、我所做的描述后,我并不总是输入结束时间。因此,在提交并完成任务后,我在手机上打开了一个快捷方式,然后在顶部有最新的日期条目(我曾经向下滚动,这在移动设备上变得难以忍受)。这是一个示例表单/响应的链接drive.google.com/…
  • 在这种情况下,我建议使用使用 Apps Script HtmlService 的自定义构建表单。 developers.google.com/apps-script/guides/html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多