我已经设置了一个脚本来复制和处理从表单生成的电子表格。
我收集这样的回复:
var responses = formResponses.getDataRange().getValues();
然后通过数组索引访问各个列,例如:
var timestamp = row[0];
var agentName = row[1];
现在,虽然这有效。对表单的任何更改都可能最终搞砸整个事情,并且数组索引也会改变。
我可以改为按列名查询吗?
我已经设置了一个脚本来复制和处理从表单生成的电子表格。
我收集这样的回复:
var responses = formResponses.getDataRange().getValues();
然后通过数组索引访问各个列,例如:
var timestamp = row[0];
var agentName = row[1];
现在,虽然这有效。对表单的任何更改都可能最终搞砸整个事情,并且数组索引也会改变。
我可以改为按列名查询吗?
如果onFormSubmit event
由于您需要在提交后访问数据而无法通过 访问它,我已经创建了允许您通过列名访问的代码。
function getDataFields(workingRow){
//header is row 1 -- not row 0
var headerRow = 1;
var headerRowValues = getRowRange(headerRow).getValues();
var workingRowValues = getRowRange(workingRow).getValues();
var dataFields = [];
for (var colNum in headerRowValues[0]){
dataFields[headerRowValues[0][colNum]] = workingRowValues[0][colNum];
}
dataFields['Working Row'] = workingRow;
return dataFields;
}
function getRowRange(workingRow){
var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lastColumn = activeSheet.getLastColumn();
return activeSheet.getRange(workingRow, 1, 1, lastColumn);
}
然后,您可以使用 dataFields['Column Name'] 访问该特定行的数据。
如果您使用onFormSubmit event
您可以通过其命名值访问所有表单值,这在电子表格表单提交事件的文档中进行了解释,因此您将不再遇到此问题...