Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Google Dokümanlar API'sinin faydalı uygulamalarından biri, bir veya daha fazla veri kaynağındaki bilgileri bir dokümanda birleştirmektir.
Bu sayfada, harici bir kaynaktan alınan verilerin mevcut bir şablon belgesine nasıl eklenebileceği açıklanmaktadır.
Şablon, şablondan oluşturulan tüm dokümanlarda aynı sabit metni içeren özel bir doküman türüdür. Ayrıca, diğer dinamik metinlerin yerleştirilebileceği belirlenmiş yer tutucular da içerir. Örneğin, bir sözleşme şablonunda alıcının adı, adresi ve diğer ayrıntıları için yerlerin yanı sıra sabit içerik de bulunabilir. Uygulamanız daha sonra müşteriye özel verileri şablonla birleştirerek tamamlanmış belgeler oluşturabilir.
Bu yaklaşımın faydalı olmasının birkaç nedeni vardır:
Tasarımcılar, Google Dokümanlar düzenleyicisini kullanarak doküman tasarımında kolayca ince ayar yapabilir. Bu, oluşturulan düzeni ayarlamak için uygulamanızdaki parametreleri ayarlamaktan çok daha kolaydır.
İçeriği sunumdan ayırmak, birçok avantajı olan iyi bilinen bir tasarım ilkesidir.
Temel bir yemek tarifi
Dokümanlar API'sini kullanarak verileri bir dokümanda nasıl birleştirebileceğinize dair bir örneği aşağıda bulabilirsiniz:
Tasarım ve biçimlendirme konusunda size yardımcı olması için yer tutucu içerik kullanarak dokümanınızı oluşturun. Değiştirmek istediğiniz tüm metin biçimlendirmeleri korunur.
Ekleyeceğiniz her öğe için yer tutucu içeriği bir etiketle değiştirin. Normalde oluşması muhtemel olmayan dizeler kullandığınızdan emin olun. Örneğin, {{account-holder-name}} iyi bir etiket olabilir.
Kodunuzda, dokümanın kopyasını oluşturmak için Google Drive API'yi kullanın.
Bir şablonun tüm sekmelerindeki 2 alanı gerçek değerlerle değiştirerek tamamlanmış bir belge oluşturan aşağıdaki örneği inceleyin.
Bu birleştirme işlemini gerçekleştirmek için aşağıdaki kodu kullanabilirsiniz.
Java
StringcustomerName="Alice";DateTimeFormatterformatter=DateTimeFormatter.ofPattern("yyyy/MM/dd");Stringdate=formatter.format(LocalDate.now());List<Request>requests=newArrayList<>();// One option for replacing all text is to specify all tab IDs.requests.add(newRequest().setReplaceAllText(newReplaceAllTextRequest().setContainsText(newSubstringMatchCriteria().setText("{{customer-name}}").setMatchCase(true)).setReplaceText(customerName).setTabsCriteria(newTabsCriteria().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(newRequest().setReplaceAllText(newReplaceAllTextRequest().setContainsText(newSubstringMatchCriteria().setText("{{date}}").setMatchCase(true)).setReplaceText(date)));BatchUpdateDocumentRequestbody=newBatchUpdateDocumentRequest();service.documents().batchUpdate(documentId,body.setRequests(requests)).execute();
Node.js
letcustomerName='Alice';letdate=yyyymmdd()letrequests=[// 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)returnconsole.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()
Şablonları yönetin
Uygulamanın tanımladığı ve sahip olduğu şablon dokümanları için uygulamayı temsil eden özel bir hesap kullanarak şablon oluşturun.
Hizmet hesapları, paylaşımı kısıtlayan Google Workspace politikalarıyla ilgili sorunları önlemek için iyi bir seçimdir.
Şablonlardan doküman örnekleri oluştururken her zaman son kullanıcı kimlik bilgilerini kullanın. Bu sayede kullanıcılar, ortaya çıkan doküman üzerinde tam kontrol sahibi olur ve Drive'daki kullanıcı başına sınırlarla ilgili ölçeklendirme sorunları önlenir.
Hizmet hesabı kullanarak şablon oluşturmak için uygulama kimlik bilgileriyle aşağıdaki adımları uygulayın:
Dokümanlar API'sindeki documents.create yöntemini kullanarak doküman oluşturun.
Drive API'deki permissions.create yöntemini kullanarak doküman alıcılarının dokümanı okumasına izin verecek şekilde izinleri güncelleyin.
Drive API'de permissions.create kullanarak şablon yazarlarının yazmasına izin verecek şekilde izinleri güncelleyin.
Şablonu gerektiği gibi düzenleyin.
Dokümanın bir örneğini oluşturmak için kullanıcı kimlik bilgileriyle aşağıdaki adımları uygulayın:
Drive API'deki files.copy'yi kullanarak şablonun bir kopyasını oluşturun.
[null,null,["Son güncelleme tarihi: 2025-08-29 UTC."],[],[],null,["# Merge text into a document\n\nOne useful application of the Google Docs API is to merge information from one\nor more data sources into a document.\n\nThis page outlines how you can take data from an external source and insert it\ninto an existing template document.\n\nA *template* is a special type of document containing the same fixed text for\nall documents created from the template, along with designated placeholders\nwhere other dynamic text can be placed. For example, a contract template might\nhave fixed content, along with spots for the receiver's name, address, and other\ndetails. Your app can then merge customer-specific data into the template to\ncreate finished documents.\n\nThere are several reasons why this approach is useful:\n\n- It's easy for designers to fine-tune a document's design using the\n Google Docs editor. This is much easier than tuning parameters in your app\n to set the rendered layout.\n\n- Separating content from presentation is a well-known design principle with\n many benefits.\n\nA basic recipe\n--------------\n\nHere's an example of how you can use the Docs API to merge data into a\ndocument:\n\n1. Create your document using placeholder content to help you with the design\n and format. Any text formatting you want to replace is preserved.\n\n2. For each element you'll be inserting, replace the placeholder content with a\n tag. Be sure to use strings that are unlikely to occur normally. For\n example,\n `{{account-holder-name}}` might be a good tag.\n\n3. In your code, use the Google Drive API to make a copy of the document.\n\n4. In your code, use the Docs API's\n [`batchUpdate()`](/workspace/docs/api/reference/rest/v1/documents/batchUpdate)\n method with the document name and include a\n [`ReplaceAllTextRequest`](/workspace/docs/api/reference/rest/v1/documents/request#replacealltextrequest).\n\nDocument IDs reference a document and they can be derived from the URL \n\n```\nhttps://docs.google.com/document/d/documentId/edit\n```\n| You can perform multiple replacements in the same BatchUpdate request for efficiency. See [batch request best practices](/workspace/docs/api/how-tos/batch) for how to batch API calls together\n\nExample\n-------\n\nConsider the following example, which replaces 2 fields across all tabs of a\ntemplate with real values to generate a finished document.\n\nTo perform this merge, you can use the code below. \n\n### Java\n\n```java\nString customerName = \"Alice\";\nDateTimeFormatter formatter = DateTimeFormatter.ofPattern(\"yyyy/MM/dd\");\nString date = formatter.format(LocalDate.now());\n\nList\u003cRequest\u003e requests = new ArrayList\u003c\u003e();\n// One option for replacing all text is to specify all tab IDs.\nrequests.add(new Request()\n .setReplaceAllText(new ReplaceAllTextRequest()\n .setContainsText(new SubstringMatchCriteria()\n .setText(\"{{customer-name}}\")\n .setMatchCase(true))\n .setReplaceText(customerName)\n .setTabsCriteria(new TabsCriteria()\n .addTabIds(TAB_ID_1)\n .addTabIds(TAB_ID_2)\n .addTabIds(TAB_ID_3))));\n// Another option is to omit TabsCriteria if you are replacing across all tabs.\nrequests.add(new Request()\n .setReplaceAllText(new ReplaceAllTextRequest()\n .setContainsText(new SubstringMatchCriteria()\n .setText(\"{{date}}\")\n .setMatchCase(true))\n .setReplaceText(date)));\n\nBatchUpdateDocumentRequest body = new BatchUpdateDocumentRequest();\nservice.documents().batchUpdate(documentId, body.setRequests(requests)).execute();\n```\n\n### Node.js\n\n```javascript\n let customerName = 'Alice';\n let date = yyyymmdd()\n let requests = [\n // One option for replacing all text is to specify all tab IDs.\n {\n replaceAllText: {\n containsText: {\n text: '{{customer-name}}',\n matchCase: true,\n },\n replaceText: customerName,\n tabsCriteria: {\n tabIds: [TAB_ID_1, TAB_ID_2, TAB_ID_3],\n },\n },\n },\n // Another option is to omit TabsCriteria if you are replacing across all tabs.\n {\n replaceAllText: {\n containsText: {\n text: '{{date}}',\n matchCase: true,\n },\n replaceText: date,\n },\n },\n ];\n\n google.options({auth: auth});\n google\n .discoverAPI(\n 'https://docs.googleapis.com/$discovery/rest?version=v1&key={YOUR_API_KEY}')\n .then(function(docs) {\n docs.documents.batchUpdate(\n {\n documentId: '1yBx6HSnu_gbV2sk1nChJOFo_g3AizBhr-PpkyKAwcTg',\n resource: {\n requests,\n },\n },\n (err, {data}) =\u003e {\n if (err) return console.log('The API returned an error: ' + err);\n console.log(data);\n });\n });\n```\n\n### Python\n\n```python\ncustomer_name = 'Alice'\ndate = datetime.datetime.now().strftime(\"%y/%m/%d\")\n\nrequests = [\n # One option for replacing all text is to specify all tab IDs.\n {\n 'replaceAllText': {\n 'containsText': {\n 'text': '{{customer-name}}',\n 'matchCase': 'true'\n },\n 'replaceText': customer_name,\n 'tabsCriteria': {\n 'tabIds': [TAB_ID_1, TAB_ID_2, TAB_ID_3],\n },\n }},\n # Another option is to omit TabsCriteria if you are replacing across all tabs.\n {\n 'replaceAllText': {\n 'containsText': {\n 'text': '{{date}}',\n 'matchCase': 'true'\n },\n 'replaceText': str(date),\n }\n }\n]\n\nresult = service.documents().batchUpdate(\n documentId=document_id, body={'requests': requests}).execute()\n```\n| **Note:** For documents with multiple [tabs](/workspace/docs/api/how-tos/tabs), [`ReplaceAllTextRequest`](/workspace/docs/api/reference/rest/v1/documents/request#replacealltextrequest) by default applies to all tabs. See the request documentation for more information about how to work with tabs.\n\nManage templates\n----------------\n\nFor template documents the application defines and owns, create\nthe template using a dedicated account representing the application.\n[Service accounts](/identity/protocols/application-default-credentials)\nare a good choice and avoid complications with Google Workspace policies that\nrestrict sharing.\n\nWhen you create instances of documents from templates, always use\nend-user credentials. This gives users full control over the\nresulting document and prevents scaling issues related to per-user\nlimits in Drive.\n\nTo create a template using a service account, perform the following steps with\nthe application credentials:\n\n1. Create a document using [documents.create](/workspace/docs/api/reference/rest/v1/documents/create) in the Docs API.\n2. Update the permissions to allow the document recipients to read it using [permissions.create](/workspace/drive/api/v3/reference/permissions/create) in the Drive API.\n3. Update the permissions to allow template authors to write to it using [permissions.create](/workspace/drive/api/v3/reference/permissions/create) in the Drive API.\n4. Edit the template as required.\n\nTo create an instance of the document, perform the following steps with the user\ncredentials:\n\n1. Create a copy of the template using [files.copy](/workspace/drive/v3/reference/files/copy) in the Drive API.\n2. Replace values using [documents.batchUpdate](/workspace/docs/api/reference/rest/v1/documents/batchUpdate) in the Docs API."]]