Scalanie tekstu w dokument

Przydatnym zastosowaniem interfejsu API Dokumentów Google jest scalanie informacji pochodzących z lub większą liczbę źródeł danych.

Na tej stronie opisujemy, jak pobrać dane ze źródła zewnętrznego i je wstawić do istniejącego dokumentu szablonu.

Szablon to specjalny typ dokumentu, który zawiera ten sam stały tekst we wszystkich dokumentach utworzonych na podstawie szablonu, a także wyznaczone obiekty zastępcze. gdzie można umieścić inny tekst dynamiczny. Na przykład szablon umowy może zawierać stałą treść wraz z miejscami na imię i nazwisko, adres i nazwisko odbiorcy inne szczegóły. Aplikacja będzie mogła wtedy scalić w szablonie dane dotyczące konkretnego klienta. aby utworzyć gotowe dokumenty.

Takie podejście jest przydatne z kilku powodów:

  • Projektanci mogą z łatwością dostroić projekt dokumentu za pomocą za pomocą edytora Dokumentów Google. To znacznie łatwiejsze zadanie niż dostrajanie parametrów aby ustawić wyrenderowany układ.

  • Oddzielenie treści od prezentacji to dobrze znany projekt. z wieloma korzyściami.

Ogólny schemat scalania.

Podstawowy przepis

Oto przykład, jak można skorzystać z interfejsu API Dokumentów do scalenia danych w dokument:

  1. Utwórz dokument za pomocą aby ułatwić Ci projektowanie i formatowanie. Formatowanie tekstu, które chcesz zastąpić, zostanie zachowane.

  2. W przypadku każdego wstawianego elementu zastąp zawartość zastępczą . Pamiętaj, by użyć ciągów znaków, które prawdopodobnie nie wystąpią prawidłowo. Przykład: Dobrym tagiem może być {{account-holder-name}}.

  3. Aby utworzyć kopię dokumentu, w swoim kodzie użyj interfejsu Google Drive API.

  4. W swoim kodzie użyj metody batchUpdate() interfejsu API Dokumentów Google z nazwę dokumentu i dodaj ReplaceAllTextRequest

Identyfikatory dokumentów odwołują się do dokumentu i można je pobrać na podstawie adresu URL.

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

Przykład

Przyjrzyjmy się przykładowi, który zamienia 2 pola na wszystkich kartach szablon z prawdziwymi wartościami, by wygenerować gotowy dokument.

Aby to zrobić, możesz użyć poniższego kodu.

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

Zarządzaj szablonami

W przypadku dokumentów szablonów definiowanych i należących do aplikacji utwórz używając dedykowanego konta reprezentującego aplikację. Konta usługi są dobrym wyborem i pozwalają uniknąć komplikacji z zasadami Google Workspace, które ogranicz udostępnianie.

Gdy tworzysz instancje dokumentów na podstawie szablonów, zawsze używaj danych logowania użytkownika. Dzięki temu użytkownicy mają pełną kontrolę nad powstały w ten sposób dokument i zapobiega problemom ze skalowaniem powiązanym z poszczególnymi użytkownikami. i ograniczeniami na Dysku.

Aby utworzyć szablon za pomocą konta usługi, wykonaj te czynności na stronie dane logowania do aplikacji:

  1. Utwórz dokument, używając documents.create w interfejsie API Dokumentów.
  2. Zaktualizuj uprawnienia, aby umożliwić odbiorcom dokumentu odczytywanie go za pomocą permissions.create w za pomocą interfejsu Drive API.
  3. Zaktualizuj uprawnienia, aby umożliwić autorom szablonu zapisywanie w szablonie za pomocą permissions.create w za pomocą interfejsu Drive API.
  4. W razie potrzeby zmodyfikuj szablon.

Aby utworzyć instancję dokumentu, wykonaj te czynności danymi logowania użytkownika:

  1. Utwórz kopię szablonu za pomocą atrybutu files.copy w interfejsie Drive API.
  2. Zastąp wartości za pomocą: documents.batchUpdate w interfejsie API Dokumentów.