![](/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.