有谷歌表排序从提交基于在第二列的值



我有一个脚本,可以根据单元格将行移动到同名的工作表中。

我正试图让这个工作onFormSubmit,但我没有运气。

OnEdit脚本工作完美,但在表单提交后什么都没有发生。

function onFormSubmit(e) {
let range = e.range;
let col = range.getColumn();
let row = range.getRow();
let val = range.getValue();
let source = e.source.getActiveSheet();

if (col == 2 && val != '') {
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName(source.getName());
let targetSheet = ss.getSheetByName(val);
let data = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues();
targetSheet.appendRow(data[0]);
sheet.deleteRow(row);
}
}

首先,对象"你从onEdit事件中得到的和从onFormSubmit事件中得到的是不同的,它们的字段是不同的,你访问它们值的方式也是不同的。

应用于代码的主要区别在于如何访问对象e的输入值,对于onEdit您可以使用e.value访问输入值。函数(当编辑一个单元格时)和e.values(当编辑单元格范围时),而对于onFormSubmit您只能使用e.values访问输入值。(数组值).

你可以在这里看到所有的差异:App Script Documentation

请尝试此代码:

function onMyFormSubmit(e) {
const values = e.values;
if (values[1] != '') {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const targetSheet = ss.getSheetByName(values[1]);
targetSheet.getRange(targetSheet.getLastRow()+1 ,1,1,values.length).setValues([values]);
const sheet = e.range.getSheet();
sheet.deleteRow(e.range.rowStart);
}
}

p。我通过点击"时钟"来测试代码设置触发器。图标在左窗格。触发设置