我正在尝试将相同的电子表格用于多个自动和半自动功能,其中一个功能是允许用户提交GoogleForms数据。
我的目标是提取表单回复,这样主表上的下一个空白行(标题为" Apps")就会填充新提交的数据(其中列名与列名相同) "表格回复"表格)。
我一直在玩下面的内容,OnEdit(e)
设置为"表格提交"但那并不能让我得到我需要的东西。
function onEdit(e){
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = e.range;
var sheet = range.getSheet()
var newSheet = ss.getSheetByName("Apps")
var sheetName = sheet.getName()
if(sheetName != "Form"){
return //exit function
}
var columnOfCellEdited = e.range.getColumn();
if (columnOfCellEdited === 1)
var range2 = range.getRow();
var destrange = newSheet.getLastRow()
sheet = newSheet
// adds the formulas
var cell = sheet.getRange("C" + destrange);
cell.setFormula('=Form!$C' + destrange);
var cell = sheet.getRange("D" + destrange);
cell.setFormula('=Form!$D' + destrange);
var cell = sheet.getRange("E" + destrange);
cell.setFormula('=Form!$E' + destrange);
var cell = sheet.getRange("F" + destrange);
cell.setFormula('=Form!$F' + destrange);
var cell = sheet.getRange("G" + destrange);
cell.setFormula('=Form!$G' + destrange);
var cell = sheet.getRange("H" + destrange);
cell.setFormula('=Form!$H' + destrange);
}
最后,我发现这个SO answer看起来如果我知道把东西放在哪里会有帮助。
编辑:下面尝试根据MrRebot建议实施,不会产生任何可见的结果。表格还应该挂单?
function onEdit(e) {
var form = FormApp.openById('1YLnK8kw2dRMUUvL1l3s4qjz9fSRIe7kj92MlPV5WV5M');
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++) {
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j++) {
var itemResponse = itemResponses[j];
Logger.log('Response #%s to the question "%s" was "%s"',
(i + 1).toString(),
itemResponse.getItem().getTitle(),
itemResponse.getResponse());
}
}
var ss = SpreadsheetApp.getActiveSheet();
ss.insertRowAfter(ss.getLastRow());
ss.getRange(ss.getLastRow(),1,1,ss.getLastColumn()).copyTo(ss.getRange(ss.getLastRow()+1,1));
}
答案 0 :(得分:1)
在表单提交时,请尝试使用FormResponse获取回复列表。请参阅示例代码:
// Open a form by ID and log the responses to each question.
var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz');
var formResponses = form.getResponses();
for (var i = 0; i < formResponses.length; i++) {
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j++) {
var itemResponse = itemResponses[j];
Logger.log('Response #%s to the question "%s" was "%s"',
(i + 1).toString(),
itemResponse.getItem().getTitle(),
itemResponse.getResponse());
}
}
然后尝试将此代码发送到insert a new row:
var ss = SpreadsheetApp.getActiveSheet();
ss.insertRowAfter(ss.getLastRow());
ss.getRange(ss.getLastRow(),1,1,ss.getLastColumn()).copyTo(ss.getRange(ss.getLastRow()+1,1));
希望这有帮助。