Google 文档 API 的一个实用应用是将来自一个或多个数据源的信息合并到文档中。
本页面概述了如何从外部来源获取数据并将其插入现有模板文档。
模板是一种特殊类型的文档,其中包含基于模板创建的所有文档的相同固定文本,以及可放置其他动态文本的指定占位符。例如,合同模板可能包含固定内容,以及接收者姓名、地址和其他详细信息的位置。然后,应用可以将特定于客户的数据合并到模板中,以创建完成的文档。
这种方法很有用,原因如下:
设计人员可以轻松使用 Google 文档编辑器微调文档设计。这比调整应用中的参数来设置渲染布局容易得多。
将内容与演示文稿分离是一个众所周知的设计原则,它具有许多优势。
基本食谱
以下示例展示了如何使用 Google 文档 API 将数据合并到文档中:
请使用占位符内容创建文档,以帮助您进行设计和格式。系统会保留您要替换的所有文本格式。
对于您要插入的每个元素,请将占位符内容替换为标记。请务必使用一般情况下不太可能出现的字符串。例如,
{{account-holder-name}}
可能是一个不错的标记。在您的代码中,使用 Google Drive API 创建文档的副本。
在代码中,使用 Google 文档 API 的
batchUpdate()
方法和文档名称,并添加一个ReplaceAllTextRequest
。
文档 ID 引用了文档,并且可以从网址派生而来
https://docs.google.com/document/d/documentId/edit
示例
请考虑以下示例,该示例将模板中的 2 个字段替换为实际值,以生成完成后的文档。
如需执行此合并,您可以使用以下代码。
Java
String customerName = "Alice"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd"); String date = formatter.format(LocalDate.now()); List<Request> requests = new ArrayList<>(); requests.add(new Request() .setReplaceAllText(new ReplaceAllTextRequest() .setContainsText(new SubstringMatchCriteria() .setText("{{customer-name}}") .setMatchCase(true)) .setReplaceText(customerName))); 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 = [ { replaceAllText: { containsText: { text: '{{customer-name}}', matchCase: true, }, replaceText: customerName, }, }, { 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 = [ { 'replaceAllText': { 'containsText': { 'text': '{{customer-name}}', 'matchCase': 'true' }, 'replaceText': customer_name, }}, { '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 创建文档。
- 更新权限以允许文档收件人使用 Drive API 中的 permissions.create 进行读取。
- 更新权限以允许模板作者使用 Drive API 中的 permissions.create 向模板作者写入数据。
- 根据需要修改模板。
如需创建文档的实例,请使用用户凭据执行以下步骤:
- 在 Drive API 中使用 files.copy 创建模板的副本。
- 在 Google 文档 API 中使用 documents.batchUpdate 替换值。