我有两个Google文档(D1和D2)。我想将D1的内容复制到D2中。这些文档的fileIds存储在数据库中,由于体系结构的限制,无法对其进行修改。因此,我没有删除D2并创建D1副本的选项,因为这将导致新的fileId。我正在使用Google Drive V3 API(java)与Google Drive进行交互。
如何在不创建新文件的情况下从另一个Google文档更新Google文档的内容?
注意:这些是Google文档,不是MS-Word,PDF等其他格式
答案 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保持不变。