Node.js 使用Node创建带有内置对象的Google文档

Node.js 使用Node创建带有内置对象的Google文档,node.js,google-docs,Node.js,Google Docs,我看到了下面关于如何使用Node创建GoogleDoc实例的帖子 但是我还想传递一个对象,这样当google文档被创建时,它将该对象存储在它的环境中。有没有一种方法可以通过以下参数之一传递对象来实现 DRIVE.files.create({ resource: { name: fileName, mimeType: fileType }, media: { mimeType: fileT

我看到了下面关于如何使用Node创建GoogleDoc实例的帖子

但是我还想传递一个对象,这样当google文档被创建时,它将该对象存储在它的环境中。有没有一种方法可以通过以下参数之一传递对象来实现

DRIVE.files.create({
        resource: {
          name: fileName,
          mimeType: fileType
        },
        media: {
          mimeType: fileType,
          body: fileContent
        }
      }
任何帮助都将不胜感激

  • 您希望通过将GoogleApps脚本包含为容器绑定脚本来创建新的Google文档。
    • 作为示例情况,您希望包含
      var obj={foo“:”bar}
  • 您希望通过Node.js使用googleapis实现这一点
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

在这个答案中,为了实现这一点,我使用了Google Apps脚本API中的projects.create和projects.updateContent方法

流量: 这个答案的流程如下

  • 创建新的谷歌文档
  • 创建新的GAS项目作为创建的Google文档的容器绑定脚本
  • 将脚本放入已创建的GAS项目
  • 准备: 在运行脚本之前,请准备以下内容

  • 请在API控制台启用Google应用程序脚本API。
    • 根据您的问题,我认为您已经在API控制台启用了驱动API
  • 请设置
    https://www.googleapis.com/auth/drive
    https://www.googleapis.com/auth/script.projects
  • 请删除凭据文件,包括访问令牌和刷新令牌。因为这种方式用于将新的作用域反映到访问令牌。删除凭据文件后运行脚本时,将运行授权过程。因此,请检索代码,并使用代码检索访问令牌和刷新令牌
  • 请准备一个示例文本文件作为
    sample.txt
    的文件名。因为脚本中使用了
    媒体
  • 示例脚本:
    • 运行此示例脚本时,新的Google文档将创建为
      sampleDocument
      的文件名,新的GAS项目将创建为
      sampleGASProject
      的项目名。
      • 脚本完成后,您可以在根文件夹中看到新的Google文档。打开Google文档并打开脚本编辑器时,可以看到
        var obj={“foo”:“bar”}
        的脚本
    注:
    • 如果您使用的是服务帐户,很遗憾,GAS项目无法使用服务帐户进行管理。请小心这个。所以请使用OAuth2
    参考资料:

    在我的环境中,我可以确认示例脚本工作正常。但如果这在你的环境中不起作用,我道歉。此时,请检查API是否已启用和/或其他环境。如果我误解了你的问题,而这不是你想要的方向,我向你道歉。

    我可以问一下你的问题吗?您希望使用带有Node.js的googleapis创建新的Google文档。那时,你想把一些文本放到Google文档中。我的理解正确吗?在你的脚本中,你已经能够创建新的Google文档了吗?你所说的
    是什么意思?我还想通过一个对象,所以当Google文档被创建时,它将该对象存储在它的环境中
    ?@Tanaike不太清楚。我希望该对象存储在Google Doc应用程序脚本中。假设在节点中,我有一个对象var obj={“foo”:“bar”}。当Node创建新的googledoc实例时,我希望它在googledoc应用程序脚本中写入相同的对象。因此,当我打开google文档并转到它的脚本编辑器时,{“foo”:“bar”}已经在那里了。希望这能澄清一些事情。谢谢你们两位审阅我的帖子。我衷心感谢你们的全面回复!我将在未来几天内尝试这一点,并随时向您通报进展情况。非常感谢您为我指明了正确的方向。@Drive2blue谢谢您的回复。在我的环境中,我可以确认示例脚本工作正常。但如果这在你的环境中不起作用,我道歉。这就像魔术一样奏效!!你是个天才,先生!再次感谢您提供的具体、直观的建议。@Drive2blue感谢您的回复和测试。我很高兴你的问题解决了。也谢谢你。
    const drive = google.drive({ version: "v3", auth });
    const script = google.script({ version: "v1", auth });
    
    drive.files.create(
      {
        requestBody: {
          name: "sampleDocument",
          mimeType: "application/vnd.google-apps.document"
        },
        media: {
          mimeType: "text/plain",
          body: fs.createReadStream("./sample.txt")
        }
      },
      (err, res) => {
        if (err) {
          console.error(err);
          return;
        }
        script.projects.create(
          {
            requestBody: {
              title: "sampleGASProject",
              parentId: res.data.id
            }
          },
          (err, res) => {
            if (err) {
              console.log(err);
              return;
            }
            script.projects.updateContent(
              {
                scriptId: res.data.scriptId,
                auth,
                resource: {
                  files: [
                    {
                      name: "Code",
                      type: "SERVER_JS",
                      source: 'var obj = {"foo":"bar"}\n'
                    },
                    {
                      name: "appsscript",
                      type: "JSON",
                      source:
                        '{"timeZone":"America/New_York","exceptionLogging":"STACKDRIVER"}'
                    }
                  ]
                }
              },
              (err, res) => {
                if (err) {
                  console.log(err);
                  return;
                }
                console.log("Done.");
              }
            );
          }
        );
      }
    );