要获取电子表格,一旦您拥有 DestinationID,请使用SpreadsheetApp.openById()。一旦你有了它,你就可以检索一个工作表数组,并通过索引获取响应表,而不管它的名称是什么。
var destId = FormApp.getActiveForm().getDestinationId();
var ss = SpreadsheetApp.openById(destId);
var respSheet = ss.getSheets()[0]; // Forms typically go into sheet 0.
...
从这一点开始,您可以使用其他电子表格服务方法来操作电子表格中的数据。
我还必须确定响应使用的列数。它不等于表格中的问题数量。我可以计算表格中的项目数......(但这与电子表格不匹配)
你是对的 - 当前项目的数量不等于电子表格中的列数。每个响应在目标工作表中占据的列数包括已从表单中删除的任何问题,并且不包括不是问题的项目。此外,电子表格中列的顺序是创建问题的顺序 - 当您重新排列表单或插入新问题时,电子表格的列顺序不会反映新顺序。
假设电子表格中的唯一列来自表单,以下是您可以使用它们的方法:
...
var data = respSheet.getDataRange().getValues(); // 2d array of form responses
var headers = data[0]; // timestamp and all questions
var numColumns = headers.length; // count headers
var numResponses = data.length - 1; // count responses
最后一点是正确的,您需要关联名称。
最后,我认为没有办法将每个问题与工作表中的每一列联系起来,而是通过以某种方式将列名称与项目标题进行比较。