【问题标题】:Merge two google documents together using node googleapis使用节点 googleapis 将两个谷歌文档合并在一起
【发布时间】:2020-04-19 09:25:42
【问题描述】:

我需要将两个谷歌文档合并为一个。我知道如何复制一个文档,但我需要创建一个包含两个谷歌文档内容的新文档。

我想出了以下内容:

    const auth = await authorize(credentials)
    const docs = google.docs({version: 'v1', auth})
    const drive = google.drive({version: 'v3', auth})

    const file1ToCopy = await docs.documents.get({documentId: FILE_1_ID})
    const file2ToCopy = await docs.documents.get({documentId: file_2_ID})
    const {body: body1ToCopy} = file1ToCopy.data
    const {body: body2ToCopy} = file2ToCopy.data

    await drive.files.create({
        resource: {
            name: `test ${moment().toString()}`,
            mimeType: 'application/vnd.google-apps.document',
        },
        media: {
            body: {...body1ToCopy, ...body2ToCopy}, // This is not the correct way, body accepts only stream also the bodies received from documents.get are objects, so they probably can not be combined like this...
        },
    })

如您所见,我可以获取单个文档的正文,但无法将它们插入到一个文件中。

谁能帮我解决这个问题?

【问题讨论】:

  • body1ToCopybody2ToCopy 包含什么?
  • 这也是一个很好的参考吗? developers.google.com/drive/api/v3/reference/files/create
  • body1ToCopybody2ToCopy 包含我想要复制的文件正文。见代码sn -p
  • 必须参考google api 文档
  • 我有红色的参考。正如您在 sn-p 中看到的那样。我知道如何创建文件,但我不知道如何将其他两个文档的内容合并到其中

标签: javascript node.js google-drive-api google-docs-api


【解决方案1】:

Document 的实例不是提供给Files: create 的有效参数。您应该首先检索要添加到目标 Document 的内容,然后使用 Docs API 插入这些内容。

我建议您 (1) 制作第一个文档的副本(此副本将是合并的文档),(2) 从第二个文档中检索内容,以及 (3) 插入检索到的内容在上一步复制的文档。

您可以按照以下方式做一些事情:

步骤 1. 复制第一个文档:

使用Files: copy 复制第一个文档。第二个文档中的内容将附加到此副本中。

步骤 2. 从第二个文档中提取内容:

为了从第二个 Doc 中提取正文内容,您必须考虑到 the structure of a Google Documentdocuments.get 检索 Document 的实例,其中包含您想要的内容附加到您的新文档,但 不是内容本身。

Document resource 中的正文内容基本上是由content 中的StructuralElements 列表组成,如下所示:

{
  "documentId": string,
  "title": string,
  "body": {
    "content": [
      {
        object (StructuralElement)
      }
    ]
  },
  // Other document props
}

您必须遍历content 中的每个StructuralElement 并存储在下一步中附加内容所需的所有信息(这些至少包括结构元素的类型——因为取决于此,一个必须使用方法或其他方法——以及文本内容)。我建议您将此信息存储到对象数组中,以备后用。

作为示例,可以在此处找到有关如何从 Document 中提取文本的相当不错的解释(尽管该示例仅包含 Java 和 Python 中的示例,但将其“翻译”为节点):Extract the text from a document。您可以保留有关其他属性的信息,例如元素类型(不仅仅是文本),但基本思想非常相似。

步骤 3. 将内容附加到新文档:

从第二个文档中成功检索结构元素后,您必须使用 Docs API 将这些元素附加到使用 documents.batchUpdate 的合并文档中。

根据您每次必须附加的结构元素类型,可能需要不同的请求。例如,如果结构元素是仅包含文本的段落,则可以使用InsertTextRequest 附加文本。或者如果你想追加一个表,你必须使用InsertTableRequest。因此,脚本必须在将每个结构元素类型附加到文档之前对其进行检查。

参考:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多