如何通过 Google 脚本 API (Node.js) 添加库?

How to add libraries via Google Script API (Node.js)?

我正在开发一个应用程序,可以自动创建 google 具有容器绑定脚本的电子表格。为了方便脚本的维护,脚本没有业务逻辑,而是有委托代码,如下所示。

container-bound script

const onOpen = (e) => {
  lib.onOpen(e)
}

为此,我想将具有实际业务逻辑的库“添加”到容器绑定脚本项目。我知道如何手动实现,但我也想使用 Google Script API SDK for Node.js 来自动化它。我试图找到一种方法,但似乎 SDK 不支持以编程方式将库添加到脚本项目。

有人有解决方案吗?

谢谢,

既然如此,我认为您可以通过修改清单文件来添加库 (appsscript.json)。安装库的示例appsscript.json如下。而且,Google Apps 脚本 API 可以编辑 appsscript.json

样本appsscript.json:

{
  "timeZone": "Asia/Tokyo",
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "dependencies": {
    "libraries": [ // <--- Here, you can install the library.
      {
        "userSymbol": "lib",
        "version": "0",
        "libraryId": "### ID of library ###",
        "developmentMode": true
      }
    ]
  }
}

示例脚本:

当上面的解释反映在Node.js的示例脚本中时,它变成如下。在这种情况下,使用 Node.js 的 googleapis。

const scriptId = "###"; // Please set the script ID of the Google Apps Script project.
const lib = {
  userSymbol: "lib",
  version: "0",
  libraryId: "### ID of library ###",
  developmentMode: true,
};

const script = google.script({ version: "v1", auth }); // Please use your "auth" in your script.

// 1. Retrieve the existing scripts from Google Apps Script project.
const res1 = await script.projects.getContent({ scriptId: scriptId }).catch((err) => console.log(err.errors));
if (!res1) return;

// 2. Modify `appsscript.json` file.
const files = res1.data.files.map((e) => {
  if (e.name == "appsscript") {
    const obj = JSON.parse(e.source);
    if (
      obj.dependencies.libraries &&
      !obj.dependencies.libraries.some(
        ({ libraryId }) => libraryId == lib.libraryId
      )
    ) {
      obj.dependencies.libraries.push(lib);
    } else {
      obj.dependencies.libraries = [lib];
    }
    e.source = JSON.stringify(obj, null, "  ");
  }
  return e;
});

// 3. Update Google Apps Script project with the modified `appsscript.json` file.
const res2 = await script.projects
  .updateContent({ scriptId: scriptId, resource: { files: files } })
  .catch((err) => console.log(err.errors));
if (!res2) return;
console.log("Done.");

注:

  • 在此答案中,假设您已经能够使用 Google Apps Script API 和 Node.js 获取和放置 Google Apps Script 项目的值.请注意这一点。

参考文献: