搜索

首页  >  问答  >  正文

docx 模板内的占位符未替换

我正在使用这个库将一些占位符替换为 docx 模板并生成多个文档。我在前端使用中性诺和 vue,并且创建了一个方法,将选定的 docx 文件和数据传递到库进行处理。我以这种方式使用了 for 循环

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

要传递的数据是从两个数组合并的,如果我控制台记录它们,我可以看到所有 si 都就位。正如文档中所述,我使用方括号 {} 来设置占位符,并且占位符的名称与 dataPlaceholders 中每个键的名称相同大批。经过测试后,我注意到我能够生成不同的文档,但占位符不会被替换,并且文档中会有空白字段。

我怎样才能修复它以使这个工作正确?

P粉436410586P粉436410586289 天前465

全部回复(1)我来回复

  • 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。

    回复
    0
  • 取消回复