Maison  >  Questions et réponses  >  le corps du texte

Les espaces réservés dans le modèle docx ne sont pas remplacés

J'utilise cette bibliothèque pour remplacer certains espaces réservés par des modèles docx et générer plusieurs documents. J'utilise novo et vue neutres sur le front-end et j'ai créé une méthode qui transmet le fichier docx sélectionné et les données à la bibliothèque pour traitement. J'ai utilisé la boucle for de cette façon

// putting all the desired data into a specific array
for(let i = 0; i < this.selectedData.length; i++){
  this.dataPlaceholders.push({
   key1: val1,
   key2: val2
  })
}
//call the library to get documents

for(let i; i < this.dataPlaceholders.length; i++){
 this.docxTemplate.process(template, this.dataPlaceholders[i])
}

Les données à transmettre sont fusionnées des deux tableaux et si je les enregistre sur la console, je peux voir que tous les fichiers sont en place. Comme indiqué dans la documentation, j'utilise des crochets {} 来设置占位符,并且占位符的名称与 dataPlaceholders pour nommer chaque clé du même lot. Après les tests, j'ai remarqué que j'étais capable de générer un document différent, mais les espaces réservés n'étaient pas remplacés et il y aurait des champs vides dans le document.

Comment puis-je le réparer pour que cela fonctionne correctement ?

P粉436410586P粉436410586188 Il y a quelques jours338

répondre à tous(1)je répondrai

  • P粉394812277

    P粉3948122772024-03-31 00:57:29

    Après quelques essais et lecture de quelques questions sur la façon d'implémenter des appels asynchrones dans une boucle, j'ai choisi d'utiliser la fonction Array.prototype.map et cela a bien fonctionné. J'ai modifié la méthode vue qui appelle la bibliothèque en tant que méthode asynchrone, mais j'ai conservé le bloc then afin de pouvoir récupérer le document traité une fois le traitement de la bibliothèque terminé.

    this.dataPlaceholders.map( async (data, i) => {
      let filename = data.supplier + '.docx'
      this.docxTemplate.process(template, data).then( (result) => {
        // code to download files here
         let a = document.createElement('a')
         let downloadLink = URL.createObjectURL(result)
         a.href = downloadLink
         a.download = filename
         a.click()
      })
    })
    

    La seule chose à résoudre est de savoir comment révoquer l'URL du blob après avoir téléchargé tous les fichiers.

    répondre
    0
  • Annulerrépondre