从另一个Google文档更新Google文档的内容,而无需创建新文件

时间:2018-07-11 08:47:53

标签: google-api google-drive-api

我有两个Google文档(D1和D2)。我想将D1的内容复制到D2中。这些文档的fileIds存储在数据库中,由于体系结构的限制,无法对其进行修改。因此,我没有删除D2并创建D1副本的选项,因为这将导致新的fileId。我正在使用Google Drive V3 API(java)与Google Drive进行交互。

如何在不创建新文件的情况下从另一个Google文档更新Google文档的内容?

注意:这些是Google文档,不是MS-Word,PDF等其他格式

3 个答案:

答案 0 :(得分:1)

Google驱动器api仅是文件目录api。您需要将文件下载到系统中,在此处编辑文件,然后再次上传。

没有允许在Google驱动器本身上编辑Google文档的API。

下载文件时,您可以选择将其导出为Downloading Google Documents的格式,然后可以进行更改,然后再次上传。 upload文件分为文件的实际元数据两部分。名称,描述file resource和文件的实际数据。您只需插入一次元数据。这样一来,只要您进行更改,就可以上传文件数据,这样您将只有一个文件,没有重复的文件,只需保留相同的文件ID。

注意应用脚本

Google应用脚本确实允许对Google文档文件进行一些编辑。我知道这不是您所要的,但它可以帮助您自动化流程,请参阅Google app script

答案 1 :(得分:0)

正如其他答案中提到的那样,Google Drive API不提供复制Google Doc内容的功能。实现此目的的唯一方法是使用Google Apps脚本。以下是执行相同操作的代码:

function test() {
  var sourceFileId = 'fileId';
  var targetFileId = 'fileId';

  var sourceDocument = DocumentApp.openById(sourceFileId);
  var targetDocument = DocumentApp.openById(targetFileId);

  var sourceBody = sourceDocument.getBody();
  var targetBody = targetDocument.getBody();

  var sourceHeader = sourceDocument.getHeader();
  var targetHeader = targetDocument.getHeader();

  var sourceFooter = sourceDocument.getFooter();
  var targetFooter = targetDocument.getFooter();

  copyContent(sourceHeader, targetHeader);
  copyContent(sourceFooter, targetFooter);
  copyContent(sourceBody, targetBody);
}

var copyContent = function(source, target) {
  target.clear();

  for(var i = 0; i < source.getNumChildren(); i++) {
    var child = source.getChild(i).copy();

    if (child.getType() === DocumentApp.ElementType.TABLE) {
      target.appendTable(child);
    } else if (child.getType() === DocumentApp.ElementType.LIST_ITEM) {
      target.appendListItem(child);
    } else if (child.getType() === DocumentApp.ElementType.PARAGRAPH) {
      target.appendParagraph(child);
    }
  }
}

注意:该脚本未涵盖所有部分和元素类型。

答案 2 :(得分:-1)

在云端硬盘中,文件的内容(又名媒体)与文件的元数据分开。

因此,在伪代码中,您需要做的是:- 。 D1的下载内容 。在下载到D2的内容中使用下载的内容。

D2的文件ID保持不变。