我正在尝试创建一个脚本,该脚本将采用新的表单响应并根据提交的信息将其移动到另一张表。例如,假设表单有两个答案选项 A、B。电子表格有三张表;表单回复、工作表 A、工作表 B。如果有人提交表单并选择 A,我需要将该新行从“表单回复”移至“工作表 A”。我发现其他人的脚本完全可以执行此操作,但使用 OnEdit 函数。我无法弄清楚如何修改此脚本以在提交新表单响应时起作用。
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Form Responses" && r.getColumn() == 2 && r.getValue() == "A") {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Sheet A");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
我使用了可安装的触发器,并将 OnEdit 函数替换为 onFormSubmit,但这不起作用。如果有人能帮助我解决这个问题,我将非常感激。
Thanks,
为了实现您想要的目标,您需要:
- 创建一个函数
write_to_new_sheet
每当有新的响应到达表单时,我们就会在触发函数中使用它。该函数将把表单响应作为事件对象e
:
function write_to_new_sheet(e){
let responses = e.response.getItemResponses()
let new_row = get_new_response_data_as_row(responses)
let sheet_to_write = SpreadsheetApp.openById('your spreadsheet id').getSheetByName('sheet A') // or 'sheet B', you can set this dynamically by checking the new_row, corresponding to the response as a gsheet row
write_values_in_first_row(sheet_to_write, new_row)
}
这是辅助功能write_to_new_sheet
:
function get_new_response_data_as_row(responses){
let new_row = []
responses.forEach(response => {
new_row.push(response.getResponse())
})
return new_row
}
function write_values_in_first_row(sheet, new_row_values){
let row_to_write_from = 2 // assuming you have a header
let sheet_with_new_row = sheet.insertRowBefore(row_to_write_from)
let number_of_rows = 1
let number_of_columns = new_row_values.length
let range = sheet_with_new_row.getRange(row_to_write_from, 1, number_of_rows, number_of_columns)
let results =range.setValues([new_row_values])
return new_row_values
}
- 设置一个可安装的触发器,每当您向表单提交新的响应时,该触发器就会起作用:
function setup_write_to_new_sheet_on_form_submit(){
ScriptApp.newTrigger('write_to_new_sheet')
.forForm('your form id goes here')
.onFormSubmit()
.create();
}
- 运行上面的函数once,设置触发器。
- 尝试在表单上提交新的回复,并检查您希望写入的表格中的更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)