Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 当表单数据添加到行中时,自动在行中生成下拉列表_Google Apps Script_Google Sheets_Google Sheets Macros - Fatal编程技术网

Google apps script 当表单数据添加到行中时,自动在行中生成下拉列表

Google apps script 当表单数据添加到行中时,自动在行中生成下拉列表,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,因此,我有一个函数,可以获取表单事件提交,并将特定字段移动到单独的工作表中。现在,我需要能够添加一个下拉菜单到第一行,其中包含一些选项,例如(“新建”、“完成”、“待定”)。是否有通过函数向单元格添加下拉列表的方法 这是我的工作代码: function AM2(e) { var form_name = "Form Responses 1"; var open_name = "OPEN"; var workbook = SpreadsheetApp.getActiveSpreadsh

因此,我有一个函数,可以获取表单事件提交,并将特定字段移动到单独的工作表中。现在,我需要能够添加一个下拉菜单到第一行,其中包含一些选项,例如(“新建”、“完成”、“待定”)。是否有通过函数向单元格添加下拉列表的方法

这是我的工作代码:

function AM2(e) {
  var form_name = "Form Responses 1";
  var open_name = "OPEN";

  var workbook = SpreadsheetApp.getActiveSpreadsheet();
  var form_ws = workbook.getSheetByName(form_name);
  var open_ws = workbook.getSheetByName(open_name);

  open_ws.appendRow(['',e.values[1],'',e.values[2]]);
}
根据我的发现,我认为我可以使用
SpreadsheetApp.newDataValidation().requireRewaminList(['NEW','COMPLETE','PENDING',true)

我在想我可以这样做:

function AM2(e) {
  var form_name = "Form Responses 1";
  var open_name = "OPEN";

  var workbook = SpreadsheetApp.getActiveSpreadsheet();
  var form_ws = workbook.getSheetByName(form_name);
  var open_ws = workbook.getSheetByName(open_name);

  open_ws.appendRow(open_ws.appendRow([SpreadsheetApp.newDataValidation().requireValueInList(['NEW', 'COMPLETE', 'PENDING'], true).build(),e.values[1],'',e.values[2]]);
}
但这不起作用并导致错误。我找不到任何文档可以告诉我如何在向工作表追加行的同时添加下拉列表

也许有一种方法可以获取
appendRow()
的范围。如果我能得到这个,我可能可以解决这个错误

有什么想法吗?

问题: 作为
appendRow()
的一部分,您将无法执行此操作。您需要使用
setDataValidation()
来实现这一点,它必须用于
范围
对象


解决方案: 在追加行后直接添加数据验证规则

var row = open_ws.appendRow(['NEW',e.values[1],'',e.values[2]]).getActiveRange().getRow();

//set data validation
var rule = SpreadsheetApp.newDataValidation().requireValueInList(['NEW', 'COMPLETE', 'PENDING'], true).build();
open_ws.getRange(row, 1).setDataValidation(rule);
如您所见,我已经使用您的代码在
var rule
中构建了验证规则,然后我们所需要做的就是使用追加行上的
getActiveRange().getRow()
获取新追加行的范围,然后使用
setDataValidation(rule)
设置验证


参考:

我曾考虑过使用“获取最后一行”,但在一次提交多份提交时会出现问题。有时最后一行会重复。是否可以获取由
appendRow()处理的行?这将防止重复问题。据我所知,在
appendRow()中不可能。但是,如果您希望在每个条目上应用此验证,为什么不将其应用于整个列,而不是每次提交表单时都进行验证?我最终将构建一些功能,当选择下拉选择“完成”时,这些功能将自动将行移到“完成”选项卡。因此,我希望能够处理onFormSubmit运行的函数中的所有内容。也就是说我可能在整排都能做到。是否有一个字段可以将默认值设置为
NEW
?是否确定无法检测当前正在追加的范围
appendRow()
?使用
getRanges()
rangeList
对象,它返回一个
range
对象数组。