Fusionner du texte dans un document

L'API Google Docs peut être utile pour fusionner des informations provenant d'une ou de plusieurs sources de données 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 de document spécial contenant le même texte fixe pour tous les documents créés à partir du modèle, ainsi que des espaces réservés désignés là 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 du destinataire. Votre application peut ensuite fusionner des données spécifiques au client dans le modèle pour créer des documents terminés.

Cette approche est utile pour plusieurs raisons:

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

  • Séparer le contenu de la présentation est un principe de conception bien connu qui présente 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 en utilisant un contenu d'espace réservé pour vous aider à concevoir et à mettre en forme votre document. 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 une balise. Veillez à utiliser des chaînes peu susceptibles de se produire normalement. Par exemple, {{account-holder-name}} peut ê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 un 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 deux champs d'un modèle par 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<>();
        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()

Gérer les modèles

Pour les documents de modèle définis par l'application et lui appartenant, créez le modèle à l'aide d'un compte dédié représentant l'application. Les comptes de service constituent un bon choix et évitent toute complication avec les règles Google Workspace qui limitent le partage.

Lorsque vous créez des instances de documents à partir de modèles, utilisez toujours les identifiants de l'utilisateur final. Cela donne aux utilisateurs un contrôle total sur le document obtenu et évite les problèmes de scaling liés aux limites 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éez un document à l'aide de documents.create de l'API Docs.
  2. Mettez à jour les autorisations pour permettre aux destinataires du document de le lire à l'aide de la méthode permissions.create de l'API Drive.
  3. Mettez à jour les autorisations pour autoriser les auteurs du modèle à y écrire à l'aide de la méthode permissions.create de 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 utilisateur:

  1. Créez une copie du modèle à l'aide de files.copy dans l'API Drive.
  2. Remplacez les valeurs à l'aide de documents.batchUpdate dans l'API Docs.