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.
Podstawowy przepis
Oto przykład, jak można skorzystać z interfejsu API Dokumentów do scalenia danych w dokument:
Utwórz dokument za pomocą aby ułatwić Ci projektowanie i formatowanie. Formatowanie tekstu, które chcesz zastąpić, zostanie zachowane.
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}}
.Aby utworzyć kopię dokumentu, w swoim kodzie użyj interfejsu Google Drive API.
W swoim kodzie użyj metody
batchUpdate()
interfejsu API Dokumentów Google z nazwę dokumentu i dodajReplaceAllTextRequest
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:
- Utwórz dokument, używając documents.create w interfejsie API Dokumentów.
- Zaktualizuj uprawnienia, aby umożliwić odbiorcom dokumentu odczytywanie go za pomocą permissions.create w za pomocą interfejsu Drive API.
- Zaktualizuj uprawnienia, aby umożliwić autorom szablonu zapisywanie w szablonie za pomocą permissions.create w za pomocą interfejsu Drive API.
- W razie potrzeby zmodyfikuj szablon.
Aby utworzyć instancję dokumentu, wykonaj te czynności danymi logowania użytkownika:
- Utwórz kopię szablonu za pomocą atrybutu files.copy w interfejsie Drive API.
- Zastąp wartości za pomocą: documents.batchUpdate w interfejsie API Dokumentów.