Forms 根据提交表单生成的单元格值移动行
我有一个名为Forms 根据提交表单生成的单元格值移动行,forms,google-apps-script,google-sheets,triggers,Forms,Google Apps Script,Google Sheets,Triggers,我有一个名为产品申请表(回复)的谷歌电子表格,有三张标签为表单回复,Clifford和Jim。在表单响应表中有三列:时间戳、产品艺术家和产品标签 我希望根据ProductLabel下的单元格值,将整行移动/剪切到Clifford或Jim工作表。例如,如果单元格值为Warner我希望该行移到Clifford,如果单元格值为Universal我希望该行移到Jim 当有人填写表单时,一旦填写了表单响应,将其移动也会非常方便 function onEdit(event) { var ss = Spr
产品申请表(回复)
的谷歌电子表格,有三张标签为表单回复
,Clifford
和Jim
。在表单响应
表中有三列:时间戳
、产品艺术家
和产品标签
我希望根据ProductLabel
下的单元格值,将整行移动/剪切到Clifford
或Jim
工作表。例如,如果单元格值为Warner
我希望该行移到Clifford
,如果单元格值为Universal
我希望该行移到Jim
当有人填写表单时,一旦填写了表单响应,将其移动也会非常方便
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Form Responses" && r.getColumn() == 6 && r.getValue() == "Warner") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Clifford");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
我仍然觉得很难理解如何编写“表单提交”脚本。我已经找到了一个类似的脚本,它在编辑单元格值时有效,但在提交表单时创建行时无效。如果我正在编写此代码,下面是我将遵循的思考过程
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Form Responses" && r.getColumn() == 6 && r.getValue() == "Warner") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Clifford");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
一旦有人填写了“表单响应”表,将其移动也会非常方便
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Form Responses" && r.getColumn() == 6 && r.getValue() == "Warner") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Clifford");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
您可以编写一个在提交表单时自动触发的函数。它将收到一个事件,其中包含有关提交的信息(表单值&它们在响应表中插入的范围)
function handleNewForm(event) {
switch (event.namedValues.ProductLabel) {
case "Warner":
// write event.values to "Clifford" Sheet.
break;
case "Universal":
// write event.values to "Jim" Sheet.
break;
default:
// Unexpected input, needs to be handled
break;
}
// We have the range that contained the input, we can clear it.
// There are side-effects to this that you might not want.
event.range.clear();
}
将行复制到目标工作表
要实现这一点,您需要确定目标范围,然后执行以下操作:
destination.setValues([event.values]);
要获取目的地范围,您需要打开相应的工作表,计算出现有的数据范围(以及下一个可用的行),并使用它来获取目的地
。要使.setValues()
起作用,目的地
的维度必须与写入的二维数组的维度相同。event.values
参数是一个一维数组-一行。要将其转换为二维数组,我们只需将其作为表示行的新数组中的单个元素写入即可。因此,要将[event.values]
写入目标工作表,我们需要一个1行3列的范围
剩下的就是工作了 如果我在写这段代码,下面是我的思考过程 一旦有人填写了“表单响应”表,将其移动也会非常方便
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Form Responses" && r.getColumn() == 6 && r.getValue() == "Warner") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Clifford");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
您可以编写一个在提交表单时自动触发的函数。它将收到一个事件,其中包含有关提交的信息(表单值&它们在响应表中插入的范围)
function handleNewForm(event) {
switch (event.namedValues.ProductLabel) {
case "Warner":
// write event.values to "Clifford" Sheet.
break;
case "Universal":
// write event.values to "Jim" Sheet.
break;
default:
// Unexpected input, needs to be handled
break;
}
// We have the range that contained the input, we can clear it.
// There are side-effects to this that you might not want.
event.range.clear();
}
将行复制到目标工作表
要实现这一点,您需要确定目标范围,然后执行以下操作:
destination.setValues([event.values]);
要获取目的地范围,您需要打开相应的工作表,计算出现有的数据范围(以及下一个可用的行),并使用它来获取目的地
。要使.setValues()
起作用,目的地
的维度必须与写入的二维数组的维度相同。event.values
参数是一个一维数组-一行。要将其转换为二维数组,我们只需将其作为表示行的新数组中的单个元素写入即可。因此,要将[event.values]
写入目标工作表,我们需要一个1行3列的范围
剩下的就是工作了 简单,只需将函数“query”用作单元格公式,无需脚本
=query (base! A1:x; "select * where c='blah' ...")
在每张纸上使用它。简单,只需将函数“query”用作单元格公式,无需脚本
=query (base! A1:x; "select * where c='blah' ...")
在每张工作表上使用它。请注意,如果使用查询功能复制数据,则查询仅获取源单元格中的文本/值。例如,如果数据中有=HYPERLINK(),则使用查询复制数据将删除链接,只留下锚文本。要复制有效的公式,需要使用
getFormulas()
此方法的棘手之处在于,它为所有非公式的单元格提供了一个充满空白字符串的字符串[]。如果您盲目地使用<