概要
私が関与するいくつかのフォームや回答が多数存在するためにトリガーを提出し使用することは良い考えであるとは思いません。一方、いくつかの回答が非常に近く提出されれば、紛争になる可能性があります。 IMHOより良いアプローチは、スクリプトをデマンド(手動)で実行するか、time-driven triggerを使用することです。 Google Appsのスクリプトの実行時間として
ではなく、私はより良いアプローチは、マスターシートをクリアして、一度にすべてのシートの応答を追加することだと思い新しい応答の各シートをチェックする、6分1を超えないようにしてください。注釈、コメント、カスタムフォーマット、データ検証、またはデータ変更がマスターシートに直接適用されない場合、これは機能します。以下は、スクリプト
は、「マスター」という名前のシートに同じスプレッドシートにあるフォームの回答シートの内容を結合するスクリプトです。それは簡単に適応することができる、と私は思います。
スプレッドシートには、フォーム応答シートと「マスター」シートしか含まれていないものとします。
/**
* Joins the data from form responses sheets on a master responses sheet.
* Assumes that the master sheet has the form response headers and
* that there aren't extra columns.
*/
function joinSheetsData() {
// Initialize loop variables
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var masterName = 'Master'; // Change this.
var masterSheet = ss.getSheetByName(masterName);
var headers = [masterSheet.getDataRange().getValues()[0]];
var masterdata = [];
// Loop to append form responses from all response sheets to one array.
for(var i = 0; i < sheets.length; i++){
if(sheets[i].getName() != masterSheet.getName()){
var data = sheets[i].getDataRange().getValues();
data.splice(0,1);
masterdata = append(masterdata,data);
}
}
// Clear the master sheet.
masterSheet.clear();
// Add the headers to the master sheet.
var masterheadersRow = masterSheet.getRange(1, 1, 1,
masterdata[0].length);
masterheadersRow.setValues(headers);
// Send the resulting array to the master sheet.
var masterdataRange = masterSheet.getRange(2, 1, masterdata.length,
masterdata[0].length);
masterdataRange.setValues(masterdata);
}
/*
* Auxiliary function to append 2D arrays.
*/
function append(a,b){
for(var i = 0; i<b.length; i++){
a.push(b[i]);
}
return a;
}
これまでに何を試みましたか?コードを投稿できますか?この問題を解決するには、この[[最小限の完全で検証可能な例の作成方法]](http://stackoverflow.com/help/mcve)を確認してください。 – abielita