![](/img/trans.png)
[英]Delete Cells in sheets via script that is triggered from another sheet. [google sheet script]
[英]How to merge a large number of form response sheets into one master sheet. (Google Sheets)
我有一個電子表格,其中有大量表單(測驗)的表單響應表。 由於所有表格都包含相同的格式,數量和問題順序,因此我想將它們全部收集到一張紙中。
我知道可以使用query({sheet1!range,sheet2!range ...})來完成此操作,但是此查詢的大小非常大(有25種以上的表格!),這需要我弄亂這個公式每次我添加新表格。
我最初研究的是在一個范圍內創建一個工作表列表,然后嘗試使用間接查詢來獲取arrayformula查詢以遍歷該列表。 但是,此操作無效,並在此論壇上詢問后被告知無法完成。
建議我研究腳本,並花了整個周末的時間試圖找到可以做到這一點的腳本。 但是我失敗了。
我需要腳本將表單響應表的最后一行復制到主表的底部。 我希望腳本對所有響應表執行此操作(我為表提供了一種命名格式,該格式可以使腳本輕松查看要合並的表)。 我想我需要使用onSubmit()函數,但不確定。
我認為使用“提交時觸發”不是一個好主意,因為涉及多種形式和大量響應。 另一方面,如果非常接近地提交多個答復,則可能會產生沖突。 恕我直言,更好的方法是按需(手動)或使用時間驅動的觸發器來運行腳本。
由於Google Apps Script的執行時間不應超過六分鍾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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.