スプレッドシートを取得するには、DestinationID を取得したら、SpreadsheetApp.openById()を使用します。それができたら、名前に関係なく、シートの配列を取得し、インデックスで応答シートを取得できます。
var destId = FormApp.getActiveForm().getDestinationId();
var ss = SpreadsheetApp.openById(destId);
var respSheet = ss.getSheets()[0]; // Forms typically go into sheet 0.
...
この時点から、他の Spreadsheet Service メソッドを使用して、スプレッドシート内のデータを操作できます。
また、応答が使用する列の数も決定する必要があります。フォーム内の質問の数と等しくありません。フォーム内のアイテムの数を数えることはできます... (しかし、それはスプレッドシートと一致しません)
その通りです。現在のアイテムの数は、スプレッドシートの列の数と等しくありません。各回答が宛先シートで占める列の数には、フォームから削除された質問が含まれ、質問ではないアイテムは除外されます。また、スプレッドシートの列の順序は、質問が作成された順序です。フォームを再配置したり、新しい質問を挿入したりすると、スプレッドシートの列の順序は新しい順序を反映しません。
スプレッドシートの唯一の列がフォームからのものであると仮定すると、それらをどのように利用できるかは次のとおりです。
...
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
最後のポイントは正しいです。名前を関連付ける必要があります。
最後に、各質問をシートの各列に関連付ける方法はないと思いますが、何らかの方法で列名と項目のタイトルを比較することによって行います。