从该表中的应用脚本处理与谷歌表相关联的谷歌表单

时间:2016-01-11 16:43:21

标签: forms google-apps-script

我有一个谷歌电子表格,其中包含多个工作表(或标签)。每张纸都以其独特的形式填充。这些表单都没有嵌入电子表格中。

我需要定期删除工作表中的所有数据,并删除每个表单中保存的所有旧响应。我可以使用驻留在电子表格中的.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

1 个答案:

答案 0 :(得分:0)

我认为你可以做到这一点,而无需在你的脚本中输入ID。但是,您需要获取驱动器中的每个表单,然后遍历所有表单并获取每个表单的destinationId()

specificity

然后将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();
    };
  };
};

我没有测试过这个,所以不知道它是否有效。如果是,请在评论部分告诉我。