当前位置: 首页 > 知识库问答 >
问题:

勾选复选框自动移动谷歌表单响应

金承嗣
2023-03-14

我有谷歌表格。用户填写google表单,并创建一个名为“表单响应”的表单来记录用户响应。如果我在W列中打勾,我想使用脚本将数据从“表单响应”表移动到“已验证表单响应”。

表格响应表的链接是

https://docs.google.com/spreadsheets/d/1LUUEZ7sSjBy-WWL3TZt8l6sqtrEBn3dZ03iRDTY1bF0/edit?usp=sharing

我使用的脚本是:

function onEdit(event) {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 23 or W
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if(s.getName() == "Form responses 1" && r.getColumn() == 23 && r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Verified Form Responses");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);
    s.deleteRow(row);
  }
}

此代码不起作用。请帮忙。

共有1个答案

酆高翰
2023-03-14

出于某种原因,脚本正在检测来自验证表单响应工作表的所有1000行中的内容。

这可以通过记录Target etSheet.getDataRange(). getA1Notation()来检查:记录的符号是A1: Z1000,这意味着脚本在第1000行中看到了一些内容。还可以使用appendRow(rowContents)进行检查:所提供的数据被附加到第1001行,而不是应该没有内容的第一行。像从这些行中删除所有值这样的事情不会导致任何更改(脚本仍然认为这些行有内容)。

我不确定这是什么原因,因为我没有看到任何数组公式可能会弄乱它。但添加到工作表中的每一新行都被解释为具有内容。

在任何情况下,由于它检测到第1000行(工作表中的最后一行)中的内容,getLastRow()1(即第1001行)超出了工作表的尺寸,因此出现以下错误消息:

目标范围的坐标位于工作表的尺寸之外。

幸运的是,您有很多选择来解决这个问题。选择您喜欢的一个:

  • 创建一个新的目标工作表,并将数据发送到那里,而不是发送到已验证的表单响应
  • 已验证表单响应(即A42:Z1000)中删除所有假定为空的行,并使用appendRow而不是copyTo格式将不会被复制):
var targetSheet = ss.getSheetByName("Verified Form Responses");
targetSheet.appendRow(s.getRange(row, 1, 1, numColumns).getValues()[0]);
  • 通过应用getDataRange()并过滤掉所有单元格均为空的行(仅当空行之间没有中间行时有效),查找实际的第一行(不含内容):
var targetSheet = ss.getSheetByName("Verified Form Responses");
var realLastRow = targetSheet.getDataRange().getValues()
                             .filter(row => row.join('') != "").length;
var target = targetSheet.getRange(realLastRow + 1, 1);
s.getRange(row, 1, 1, numColumns).copyTo(target);
 类似资料:
  • 我有一个小问题与复选框集成在谷歌地图控件。 在谷歌地图API v3文档中,它说你可以使用“自定义控件”(https://developers.google.com/maps/documentation/javascript/examples/control-custom),但没有关于下拉框的内容。我在网上冲浪,发现了布里亚纳·沙利文的这个例子: http://vislab-ccom.unh.edu

  • 如何在java Android中创建一个自动选中的复选框?

  • 我有一个正在写的剧本,需要一些帮助。 首先,我的脚本应该如何工作。 脚本:用户填写谷歌表单并点击提交。提交后,我的脚本运行并从google工作表中读取我在工作表中操作的一系列数据单元。然后将数据单元格格式化为字符串,并在表单的确认消息中提示。 现在问题来了。 问题:当我提交我对表格的回复时,从表格到表格的一切都很好。当我手动运行代码时,代码工作正常。当我提交表单响应时,事件历史记录会显示触发器并说

  • 此函数工作正常。当当前工作表不是Google表单响应工作表时。我正在使用(每分钟)触发器 图像:沙子数据(主数据)表至(共享数据1)表 我正在寻找一个,当用户提交的谷歌表格的状态是(支付),数据应该在第二页,这是(shareData1) 这里的问题是,当我使用谷歌表单响应表时,这个函数将不再工作。它显示了一个错误。错误图像 在降级的错误图像中,我手动运行此函数,相同的错误显示在AppScript面

  • 问题描述 在同一级下面的节点,我想要拿到el-tree勾选的节点 判断如果节点满足条件会自动勾选其他的节点 你期待的结果是什么? 比如 勾选2-1,通过'-'左边判断,如果是2,就自动勾选2-0;如果是3,就自动勾选3-0,并且在有2-1的情况下,点击2-0不能被取消勾选,除非只有2-0自身了,点击才能取消勾选。这种判断只判断同一级的,不同级的不判断 勾选3 自动勾选3-0 我遇到的问题? 如果我

  • 问题内容: 我是php的新手,我想根据从MySQL获取的结果动态创建复选框。如果我在employee表中有10条记录,那么它必须创建10个以员工姓名作为value的复选框。我看过几本教程来制作数组复选框等,但无法解决问题。请那里的任何人帮助!!! 问题答案: 试试看: 上面看到的示例依赖于两点才能真正正常运行: 您正在使用MySQL 您的SQL查询必须检索员工的姓名(以便您可以在循环中使用它们