Google 文档 API 的一项实用应用是,将来自 Google 文档的信息 一个或多个数据源导入文档
本页面概述了如何从外部来源获取数据并将其插入 复制到现有的模板文档中。
模板是一种特殊类型的文档,其中包含通过模板创建的所有文档的相同固定文本,以及指定的占位符 其他动态文字的放置位置。例如,合同模板可能包含固定内容,以及接收方姓名、地址和 其他详细信息然后,您的应用就可以将特定于客户的数据合并到模板中 创建已完成的文档。
这种方法很有用,原因如下:
设计人员可以轻松 Google 文档编辑器。这比在 设置渲染的布局。
众所周知,将内容与演示文稿分离开来 具有诸多益处。
基本食谱
以下示例展示了如何使用 Google 文档 API 将数据合并到文档中:
使用以下应用创建文档: 占位内容,以帮助您进行设计和格式。系统会保留您要替换的所有文本格式。
对于您要插入的每个元素,将占位符内容替换为 标记前面。请务必使用一般情况下不太可能出现的字符串。例如:
{{account-holder-name}}
可能是一个不错的标记。在您的代码中,使用 Google Drive API 创建文档的副本。
在代码中,将 Google 文档 API 的
batchUpdate()
方法与 文档名称,并添加ReplaceAllTextRequest
。
文档 ID 引用了文档,并且可以从网址派生而来
https://docs.google.com/document/d/documentId/edit<ph type="x-smartling-placeholder">
示例
请考虑以下示例,它替换了 真实值来生成最终文档。
如需执行此合并,您可以使用以下代码。
Java
String customerName = "Alice"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); String date = formatter.format(LocalDate.now()); List<Request> requests = new ArrayList<>(); // One option for replacing all text is to specify all tab IDs. requests.add(new Request() .setReplaceAllText(new ReplaceAllTextRequest() .setContainsText(new SubstringMatchCriteria() .setText("{{customer-name}}") .setMatchCase(true)) .setReplaceText(customerName) .setTabsCriteria(new TabsCriteria() .addTabIds(TAB_ID_1) .addTabIds(TAB_ID_2) .addTabIds(TAB_ID_3)))); // Another option is to omit TabsCriteria if you are replacing across all tabs. requests.add(new Request() .setReplaceAllText(new ReplaceAllTextRequest() .setContainsText(new SubstringMatchCriteria() .setText("{{date}}") .setMatchCase(true)) .setReplaceText(date))); BatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest(); service.documents().batchUpdate(documentId, body.setRequests(requests)).execute();
Node.js
let customerName = 'Alice'; let date = yyyymmdd() let requests = [ // One option for replacing all text is to specify all tab IDs. { replaceAllText: { containsText: { text: '{{customer-name}}', matchCase: true, }, replaceText: customerName, tabsCriteria: { tabIds: [TAB_ID_1, TAB_ID_2, TAB_ID_3], }, }, }, // Another option is to omit TabsCriteria if you are replacing across all tabs. { replaceAllText: { containsText: { text: '{{date}}', matchCase: true, }, replaceText: date, }, }, ]; google.options({auth: auth}); google .discoverAPI( 'https://docs.googleapis.com/$discovery/rest?version=v1&key={YOUR_API_KEY}') .then(function(docs) { docs.documents.batchUpdate( { documentId: '1yBx6HSnu_gbV2sk1nChJOFo_g3AizBhr-PpkyKAwcTg', resource: { requests, }, }, (err, {data}) => { if (err) return console.log('The API returned an error: ' + err); console.log(data); }); });
Python
customer_name = 'Alice' date = datetime.datetime.now().strftime("%y/%m/%d") requests = [ # One option for replacing all text is to specify all tab IDs. { 'replaceAllText': { 'containsText': { 'text': '{{customer-name}}', 'matchCase': 'true' }, 'replaceText': customer_name, 'tabsCriteria': { 'tabIds': [TAB_ID_1, TAB_ID_2, TAB_ID_3], }, }}, # Another option is to omit TabsCriteria if you are replacing across all tabs. { 'replaceAllText': { 'containsText': { 'text': '{{date}}', 'matchCase': 'true' }, 'replaceText': str(date), } } ] result = service.documents().batchUpdate( documentId=document_id, body={'requests': requests}).execute()
管理模板
对于应用定义并拥有的模板文档,可以创建 使用代表应用的专用账号创建模板。 服务账号 是一个不错的选择,可避免 Google Workspace 政策的复杂问题, 限制共享。
通过模板创建文档实例时,请始终使用 最终用户凭据这样,用户就可以完全控制 生成的文档,并防止与每位用户相关的扩缩问题 限制。
如需使用服务账号创建模板,请根据名称 应用凭据:
- 使用以下应用创建文档: Google 文档 API 中的 documents.create。
- 更新权限以允许文档收件人使用 permissions.create Drive API
- 更新权限以允许模板作者使用 permissions.create Drive API
- 根据需要修改模板。
如需创建文档实例,请执行以下步骤 替换为用户凭据:
- 使用 Drive API 中的 files.copy。
- 使用以下参数替换值: documents.batchUpdate 文档 API 中的文档。