Fusionner du texte dans un document

L'API Google Docs peut être utile pour fusionner les informations sources de données ou plus dans un document.

Cette page explique comment récupérer des données d'une source externe et les insérer dans un modèle de document existant.

Un modèle est un type particulier de document contenant le même texte fixe pour tous les documents créés à partir du modèle, ainsi que les espaces réservés désignés. où d'autres textes dynamiques peuvent être placés. Par exemple, un modèle de contrat peut avoir un contenu fixe, ainsi que des emplacements pour le nom, l’adresse et d'autres détails. Votre application peut ensuite fusionner des données spécifiques au client dans le modèle. pour créer des documents finis.

Cette approche est utile pour plusieurs raisons:

  • Il est facile pour les concepteurs d'affiner la conception d'un document en utilisant l'éditeur Google Docs. C'est beaucoup plus facile que de régler des paramètres votre application pour définir la mise en page affichée.

  • Séparer le contenu de la présentation est une conception bien connue avec de nombreux avantages.

Schéma conceptuel d'une fusion.

Une recette de base

Voici un exemple d'utilisation de l'API Docs pour fusionner des données dans un document:

  1. Créez votre document à l'aide de du contenu d’espace réservé pour vous aider avec la conception et le format. La mise en forme du texte que vous souhaitez remplacer est conservée.

  2. Pour chaque élément que vous allez insérer, remplacez le contenu de l'espace réservé par un . Veillez à utiliser des chaînes peu susceptibles de se produire normalement. Par exemple, {{account-holder-name}} pourrait être un bon tag.

  3. Dans votre code, utilisez l'API Google Drive pour créer une copie du document.

  4. Dans votre code, utilisez la méthode batchUpdate() de l'API Docs avec le nom du document et incluez une ReplaceAllTextRequest

Les ID de document font référence à un document et peuvent être déterminés à partir de l'URL

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

Exemple

Prenons l'exemple suivant, qui remplace 2 champs dans tous les onglets d'un avec des valeurs réelles pour générer un document fini.

Pour effectuer cette fusion, vous pouvez utiliser le code ci-dessous.

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

Gérer les modèles

Pour les modèles de documents définis par l'application et lui appartenant, créez le modèle à l'aide d'un compte dédié représentant l'application. Comptes de service sont un bon choix et évitent les complications avec les règles Google Workspace qui restreindre le partage.

Lorsque vous créez des instances de documents à partir de modèles, utilisez toujours les identifiants de l'utilisateur final. Les utilisateurs ont ainsi un contrôle total et évite les problèmes de scaling liés au coût par utilisateur. dans Drive.

Pour créer un modèle à l'aide d'un compte de service, procédez comme suit avec les identifiants de l'application:

  1. Créer un document avec documents.create dans l'API Docs
  2. Modifiez les autorisations pour permettre aux destinataires du document de le lire avec permissions.create dans l'API Drive.
  3. Mettez à jour les autorisations pour autoriser les auteurs de modèles à y écrire des données à l'aide de permissions.create dans l'API Drive.
  4. Modifiez le modèle selon vos besoins.

Pour créer une instance du document, procédez comme suit : avec les identifiants de l'utilisateur:

  1. Créez une copie du modèle en utilisant files.copy dans l'API Drive.
  2. Remplacer les valeurs avec documents.batchUpdate dans l'API Docs.