我有一个谷歌电子表格,其中包含多个工作表(或标签)。每张纸都以其独特的形式填充。这些表单都没有嵌入电子表格中。
我需要定期删除工作表中的所有数据,并删除每个表单中保存的所有旧响应。我可以使用驻留在电子表格中的.gs脚本来完成此操作。它通过ID(在URI中出现的长字符串)访问表单。这需要在我的.gs脚本中对ID字符串进行硬编码。
理想情况下,我想从工作表对象(即每个表单条目的目标)访问每个表单。模拟代码看起来像这样......
var ss = SpreadSheedApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var form = sheet.getMyAssociatedSourceForm(); // my dream method :-)
form.deleteAllResponses() // this method already exists
有人知道这是否可行?或者我是否必须继续使用ID(目前正在使用)?
... RGDS
答案 0 :(得分:0)
我认为你可以做到这一点,而无需在你的脚本中输入ID。但是,您需要获取驱动器中的每个表单,然后遍历所有表单并获取每个表单的destinationId()
。
然后将destinationId与当前的电子表格ID进行比较,您可以在不需要“硬编码”的情况下获取该ID:
function deleteAllResponses() {
var thisSS_ID = SpreadsheetApp.getActiveSpreadsheet().getId();
var allForms = DriveApp.getFilesByType(MimeType.GOOGLE_FORMS);
var thisFormFile, thisFormFileID = "", thisForm, theDestID = "";
while (allForms.hasNext()) {
thisFormFile = allForms.next();
thisFormFileID = thisFormFile.getId();
thisForm = FormApp.openById(thisFormFileID);
try {
theDestID = thisForm.getDestinationId();
} catch(err) {
continue;
};
if (theDestID === "" || theDestID === undefined) {
continue;
};
if (theDestID === thisFormFileID) {
thisForm.deleteAllResponses();
};
};
};
我没有测试过这个,所以不知道它是否有效。如果是,请在评论部分告诉我。