首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >清理用于更新表单的Google脚本

清理用于更新表单的Google脚本
EN

Stack Overflow用户
提问于 2022-01-20 16:10:20
回答 1查看 90关注 0票数 0

我有一个脚本,我们使用它来更新不止一个Google表单上的下拉选项。我不是一个开发人员,甚至不是任何亲密的东西,但是经过多年的尝试和错误,我通常可以从脚本中得到我想要的东西。

下面是我们使用的当前脚本,但我想知道是否有一种更干净的方法来编写这个脚本,它不涉及大量的重复代码。我担心如果我们继续添加更多的文件来更新,将需要更多的资源和时间来运行。

谢谢你的建议!

PS,这是一个工作脚本,我已经将Form_ID更改为泛型名称。

代码语言:javascript
运行
复制
  const GOOGLE_SHEET_NAME = "FormData";
  const GOOGLE_FORM_ID = "Google Form ID";

  const ss = SpreadsheetApp.getActiveSpreadsheet();

  const [header, ...data] = ss
    .getSheetByName(GOOGLE_SHEET_NAME)
    .getDataRange()
    .getDisplayValues();

  const choices = {};
  header.forEach((title, i) => {
    choices[title] = data.map((d) => d[i]).filter((e) => e);
  });

  FormApp.openById(GOOGLE_FORM_ID)
    .getItems()
    .map((item) => ({
      item,
      values: choices[item.getTitle()],
    }))
    .filter(({ values }) => values)
    .forEach(({ item, values }) => {
      switch (item.getType()) {
        case FormApp.ItemType.CHECKBOX:
          item.asCheckboxItem().setChoiceValues(values);
          break;
        case FormApp.ItemType.LIST:
          item.asListItem().setChoiceValues(values);
          break;
        case FormApp.ItemType.MULTIPLE_CHOICE:
          item.asMultipleChoiceItem().setChoiceValues(values);
          break;
        default:
        // ignore item
      }
    });
  ss.toast("Google Form Updated !!");
};

{
  const GOOGLE_SHEET_NAME = "FormData";
  const GOOGLE_FORM_ID = "Google Form ID2";

  const ss = SpreadsheetApp.getActiveSpreadsheet();

  const [header, ...data] = ss
    .getSheetByName(GOOGLE_SHEET_NAME)
    .getDataRange()
    .getDisplayValues();

  const choices = {};
  header.forEach((title, i) => {
    choices[title] = data.map((d) => d[i]).filter((e) => e);
  });

  FormApp.openById(GOOGLE_FORM_ID)
    .getItems()
    .map((item) => ({
      item,
      values: choices[item.getTitle()],
    }))
    .filter(({ values }) => values)
    .forEach(({ item, values }) => {
      switch (item.getType()) {
        case FormApp.ItemType.CHECKBOX:
          item.asCheckboxItem().setChoiceValues(values);
          break;
        case FormApp.ItemType.LIST:
          item.asListItem().setChoiceValues(values);
          break;
        case FormApp.ItemType.MULTIPLE_CHOICE:
          item.asMultipleChoiceItem().setChoiceValues(values);
          break;
        default:
        // ignore item
      }
    });
  ss.toast("Google Form Updated !!");
}```
EN

回答 1

Stack Overflow用户

发布于 2022-01-20 17:49:52

代码语言:javascript
运行
复制
function myfunk() {
  const GOOGLE_SHEET_NAME = "FormData";
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  ['id1', 'id2'].forEach(GOOGLE_FORM_ID => {
    const [header, ...data] = ss
      .getSheetByName(GOOGLE_SHEET_NAME)
      .getDataRange()
      .getDisplayValues();
    const choices = {};
    header.forEach((title, i) => {
      choices[title] = data.map((d) => d[i]).filter((e) => e);
    });

    FormApp.openById(GOOGLE_FORM_ID)
      .getItems()
      .map((item) => ({
        item,
        values: choices[item.getTitle()],
      }))
      .filter(({ values }) => values)
      .forEach(({ item, values }) => {
        switch (item.getType()) {
          case FormApp.ItemType.CHECKBOX:
            item.asCheckboxItem().setChoiceValues(values);
            break;
          case FormApp.ItemType.LIST:
            item.asListItem().setChoiceValues(values);
            break;
          case FormApp.ItemType.MULTIPLE_CHOICE:
            item.asMultipleChoiceItem().setChoiceValues(values);
            break;
          default:
          // ignore item
        }
      });
  });
  ss.toast("Google Forms Updated !!");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70789605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档