suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Platzhalter innerhalb der docx-Vorlage werden nicht ersetzt

Ich verwende diese Bibliothek, um einige Platzhalter durch DOCX-Vorlagen zu ersetzen und mehrere Dokumente zu generieren. Ich verwende Neutral Novo und Vue im Frontend und habe eine Methode erstellt, die die ausgewählte DOCX-Datei und die Daten zur Verarbeitung an die Bibliothek übergibt. Ich habe die for-Schleife auf diese Weise verwendet

// 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])
}

Die zu übergebenden Daten werden aus beiden Arrays zusammengeführt und wenn ich sie in der Konsole protokolliere, kann ich sehen, dass alle Si vorhanden sind. Wie in der Dokumentation angegeben, verwende ich eckige Klammern {} 来设置占位符,并且占位符的名称与 dataPlaceholders, um jeden Schlüssel im selben Stapel zu benennen. Nach dem Testen fiel mir auf, dass ich ein anderes Dokument generieren konnte, die Platzhalter jedoch nicht ersetzt wurden und das Dokument leere Felder enthielt.

Wie kann ich das Problem beheben, damit es ordnungsgemäß funktioniert?

P粉436410586P粉436410586271 Tage vor444

Antworte allen(1)Ich werde antworten

  • P粉394812277

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

    经过一番尝试并阅读了一些有关如何在循环内实现异步调用的问题后,我选择使用 Array.prototype.map 函数,并且它工作正常。我已经修改了将库调用为异步方法的 vue 方法,但我保留了 then 块,这样我就能够在库完成处理后获取已处理的文档。

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

    唯一需要解决的是如何在下载所有文件后撤销 blob url。

    Antwort
    0
  • StornierenAntwort