Javascript 按索引顺序重建e.NamedValue,在Google应用程序脚本中推送到文档
我有一个谷歌表单,它有许多不同的分支;因此,在总共约100个问题中,任何给定的回答仅包括约20个答案。我试图找到一种方法来删除答案为“”(空白)的问题和答案,然后将这些问题和答案推送到谷歌文档中 我正在使用FormSubmit上触发的e.namedValue。但是,当然,e.namedValues实际上并没有按照提问的顺序返回回答。我需要一种方法:Javascript 按索引顺序重建e.NamedValue,在Google应用程序脚本中推送到文档,javascript,google-apps-script,Javascript,Google Apps Script,我有一个谷歌表单,它有许多不同的分支;因此,在总共约100个问题中,任何给定的回答仅包括约20个答案。我试图找到一种方法来删除答案为“”(空白)的问题和答案,然后将这些问题和答案推送到谷歌文档中 我正在使用FormSubmit上触发的e.namedValue。但是,当然,e.namedValues实际上并没有按照提问的顺序返回回答。我需要一种方法: 构建一系列问题和答案,其中只有那些问题和答案显示在答案有答案的地方 对该数组进行排序,使问题和答案按提问顺序排列 将该数组放入Google文档(
function formResponsetoGoogleDoc(e) {
var formID = {{ Insert FormID Here }};
var response = e.namedValues;
var document = DocumentApp.create('Test').getBody();
var questions = FormApp.openById(formID).getItems();
var questionarray = [];
for (Key in response) {
var label = Key;
var data = response[Key];
if (data != "") {
for (q in questions) {
var title = questions[q].getTitle();
if (title == label) {
var number = questions[q].getIndex();
}
}
questionarray.push(number + " - " + label + ": " + data);
document.appendListItem(number + " - " + label + ": " + data)
}
}
questionarray.sort();
Logger.log(questionarray);
}
这个代码不起作用。目前,questionarray按问题的顺序进行排序(例如,0、0、15、16、17、18、18、19、2、20、21、23、24)。此外,每当我尝试将其用作appendtable时,都会得到“异常:参数(编号[])与DocumentApp.Body.appendtable的方法签名不匹配。”
非常感谢您能给予的任何帮助。也愿意考虑使用E.值,但是我从来没有弄明白如何从两个数组中剔除问题和(非)答案。我也有太多的问题来证明硬编码replacetext选项的合理性,所以我试图避免这种情况。您可能需要与这个问题斗争一段时间,因为您似乎无法清楚地表达一个非常具体的问题。但你似乎有兴趣确定哪些答案已经被回答,以什么顺序被回答,而且你似乎想要不被回答的答案的索引。我相信这个数据集会让你对如何获得这些信息有一些了解。每个表单提交的信息随标题一起附加到电子表格中
function onMySubmit(e) {
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('Sheet1');
let arr1=[['Header','Value',Index','Column']];
let sh=e.range.getSheet();
let hA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0];
let col={};
let hdr={};
hA.forEach((h,i)=>{col[i]=i+1;hdr[i]=h;});
e.values.map((v,i)=>{arr1.push([hdr[i],v,i,col[i]]);});
sh.getRange(sh.getLastRow()+1,1,arr1.length,arr1[0].length).setValues(arr1);
}
答复:
在存储空值的索引时,可以使用筛选器删除空响应
代码示例:
让e.values
为:
e.values = ["Response 0", "Response 1", "", "Response 3", "Response 4", "", "", "", "Response 9"];
我们可以过滤掉空响应,并使用另一个数组存储已删除的索引:
function filterValues(e) {
var indices = [];
var filtered = e.values.filter(function (response, i) {
if (response == "") indices.push(i);
return response != "";
});
console.log(filtered);
console.log(indices);
}
将在控制台中显示以下内容:
Jan 11, 2021, 10:50:33 PM Debug [ 'Response 0',
'Response 1',
'Response 3',
'Response 4',
'Response 8' ]
Jan 11, 2021, 10:50:33 PM Debug [ 2, 5, 6, 7 ]
我希望这对你有好处
参考资料: