用另一个脚本更新谷歌表脚本

时间:2021-02-10 22:49:26

标签: google-apps-script google-sheets

我有一个文件夹,里面有大约 140 个谷歌表和一个主要的独立谷歌脚本,我用每个表中的库脚本调用它,但需要添加/更新附加到每个谷歌表脚本的所有脚本。目前我发现的唯一方法是打开每个工作表脚本并添加库脚本保存并继续,但 140 个工作表需要很长时间。我知道我需要添加或更新脚本的所有工作表都在一个文件夹中,所以我想我可以使用这样的东西来遍历所有 gsheets,但无法从这里编辑脚本...

function scriptupdate() {
  var folder = DriveApp.getFolderById('FOLDER CONTAINING THE GSHEETS ID');
  var files = folder.getFiles();
  while (files.hasNext()) {
    var file = files.next();
    Logger.log("File Name is "+file.getName());
    Logger.log("File ID is "+file.getId());
  }
} 

我不确定我正在尝试做的事情是否可行,但如果可行,我会尝试节省大量时间,但非常感谢提供的任何帮助和指导

1 个答案:

答案 0 :(得分:0)

答案

您可以使用 create 资源的某些方法更新 updateprojects 项目及其内容。由于这些在 Apps Script 中没有内置服务,因此必须使用 urlFetchApp.fetch 调用。

在编写函数时,请记住将它们放在重音符 (`) 之间。您可以使用组合键 Ctrl + Shift + I 修复整个脚本文件中的所有缩进和间距。

代码

function scriptupdate() {

  // GET FILES
  var folder = DriveApp.getFolderById('FOLDER CONTAINING THE GSHEETS ID');
  var files = folder.getFiles();
  while (files.hasNext()) {

    // GET FILE INFORMATION
    var file = files.next();
    var name = file.getName()
    var fileId = file.getId()

    // CREATE CONTAINER-BOUND SCRIPT
    var url = 'https://script.googleapis.com/v1/projects'
    var formData = {
      'title': name,
      'parentId': fileId
    };

    var options = {
      method: 'post',
      headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
      payload: formData,
      muteHttpExceptions: true
    };

    var res = JSON.parse(UrlFetchApp.fetch(url, options).getContentText())
    var scriptId = res["scriptId"]


    // UPDATE PROJECT CONTENT
    var url = 'https://script.googleapis.com/v1/projects/' + scriptId + '/content';

    var formData = {
      "files": [
        {
          "name": "appsscript",
          "type": "JSON",
          "source": `{
          "timeZone": "America/New_York",
          "dependencies": {},
          "exceptionLogging": "STACKDRIVER",
          "runtimeVersion": "V8"
          }`
        },
        {
          "name": "main",
          "source":
            `function main() {
              console.log('hello world')
            }`,
          "type": "SERVER_JS"
        }
      ]
    }

    var options = {
      method: 'put',
      contentType: 'application/json',
      payload: JSON.stringify(formData),
      headers: { Authorization: "Bearer " + ScriptApp.getOAuthToken() },
      muteHttpExceptions: true
    };

    var res = UrlFetchApp.fetch(url, options).getContentText()
    console.log(res)

  }
}

参考