google-apps-script - 使用另一个脚本更新谷歌工作表脚本

标签 google-apps-script google-sheets

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

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

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

最佳答案

回答

您可以createupdate使用 projects 的项目及其内容资源方法。由于这些在 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)

  }
}

引用

关于google-apps-script - 使用另一个脚本更新谷歌工作表脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66146276/

相关文章:

if-statement - 如果连续数字小于,Google 表格就会计数

google-sheets - Google 电子表格中带有 len 的 Countif

google-apps-script - 如何通过 Google App Script 在 Google Sheet Range 中获取绝对 A1 表示法

google-apps-script - 如何同步调用google apps脚本服务器端函数?

javascript - 在 Google Apps Script Web App 中使用 Google Visualization API 显示 GSheet 范围时出错

google-apps-script - Google 脚本,根据上次修改日期删除文件夹中的文件

google-apps-script - Google 表格 - 有没有办法将用户信息从 "show edit history"提取到单元格?

google-apps-script - BigQuery 与 Google 电子表格错误 'Required parameter is missing'

javascript - 为什么库上设置的 "developmentMode"标志被忽略?

google-apps-script - 尝试在 Google 表格中进行漏斗可视化