Metni dokümanda birleştirme

Google Docs API'nin yararlı uygulamalarından biri, bir veya daha fazla veri kaynağındaki bilgileri dokümanda birleştirmektir.

Bu sayfada, harici bir kaynaktan veri alıp mevcut bir şablon dokümanına nasıl ekleyebileceğinizi açıklanmaktadır.

Şablon, şablondan oluşturulan tüm dokümanlar için aynı sabit metni ve diğer dinamik metinlerin yerleştirilebileceği belirlenmiş yer tutucuları içeren özel bir doküman türüdür. Örneğin, bir sözleşme şablonunda sabit içeriğin yanı sıra alıcının adı, adresi ve diğer ayrıntıları için spotlar bulunabilir. Ardından uygulamanız, tamamlanmış dokümanlar oluşturmak için müşteriye özel verileri şablonda birleştirebilir.

Bu yaklaşımın faydalı olmasının birkaç nedeni vardır:

  • Tasarımcılar Google Dokümanlar düzenleyicisini kullanarak bir dokümanın tasarımında kolayca ince ayar yapabilir. Bu, oluşturulan düzeni ayarlamak için uygulamanızda parametreleri ayarlamaktan çok daha kolaydır.

  • İçeriği sunumdan ayırmak, pek çok faydası olan bilinen bir tasarım ilkesidir.

Kavramsal birleştirme şeması.

Basit bir yemek tarifi

Aşağıda, verileri bir dokümanda birleştirmek için Docs API'yi nasıl kullanabileceğinize dair bir örnek verilmiştir:

  1. Tasarım ve biçim 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.

  2. Yerleştireceğiniz her öğe için yer tutucu içeriğini bir etiketle değiştirin. Normalde oluşma olasılığı düşük dizeler kullandığınızdan emin olun. Örneğin, {{account-holder-name}} iyi bir etiket olabilir.

  3. Kodunuzda, dokümanın bir kopyasını oluşturmak için Google Drive API'yi kullanın.

  4. Kodunuzda, doküman adıyla Docs API'nin batchUpdate() yöntemini kullanın ve bir ReplaceAllTextRequest ekleyin.

Doküman Kimlikleri bir dokümana referans verir ve URL'den elde edilebilir

https://docs.google.com/document/d/documentId/edit

Örnek

Tamamlanmış bir belge oluşturmak için bir şablondaki 2 alanı gerçek değerlerle değiştiren aşağıdaki örneği düşünün.

Bu birleştirme işlemini gerçekleştirmek için aşağıdaki kodu kullanabilirsiniz.

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()

Ş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ı iyi bir seçenektir ve paylaşımı kısıtlayan Google Workspace politikalarıyla ilgili sorunlardan kaçınabilirsiniz.

Şablonlardan doküman örnekleri oluştururken her zaman son kullanıcı kimlik bilgilerini kullanın. Bu, kullanıcılara sonuç üzerinde tam kontrol sağlar ve Drive'da kullanıcı başına sınırlarla ilgili ölçeklendirme sorunlarını önler.

Hizmet hesabı kullanarak şablon oluşturmak için uygulama kimlik bilgileriyle aşağıdaki adımları uygulayın:

  1. Docs API'de documents.create'i kullanarak bir doküman oluşturun.
  2. Doküman alıcılarının Drive API'deki permissions.create parametresini kullanarak dokümanı okumasına izin vermek için izinleri güncelleyin.
  3. Şablon yazarlarının Drive API'de permissions.create etiketini kullanarak şablon yazmasına izin vermek için izinleri güncelleyin.
  4. Şablonu gereken şekilde düzenleyin.

Dokümanın bir örneğini oluşturmak için kullanıcı kimlik bilgileriyle aşağıdaki adımları uygulayın:

  1. Drive API'de files.copy'yi kullanarak şablonun bir kopyasını oluşturun.
  2. Dokümanlar API'sinde documents.batchUpdate'i kullanarak değerleri değiştirin.