内容控件设置好以后,第一次渲染数据不生效。

阅读次数 54

内容控件设置好以后,插入动态数据,第一次使用不生效,后面才生效。

    // 在模板上面填充动态数据
    async fillDyncDataInTemplate(dyncData) {
      // 处理文档内容
      const contentControls = await this.wpsApp.Application.ActiveDocument
        .ContentControls
      const count = await contentControls.Count
      for (let i = 1; i <= count; i++) {
        // 获取第 N 个内容控件
        const contentControl = await contentControls.Item(i)
        const tag = await contentControl.Tag
        let title = await contentControl.Title
        title = title.replace(/{|}/g, '')
        const range = await contentControl.Range
        // 包含产品字段或者tag为table的都属于表格数据,处理文档内容时不处理,留在处理表格时处理。
        if (title.includes('产品')) {
          range.Text = ' '
        } else if (tag === 'table' && dyncData.data.tableDataVos) {
          range.Text = ' '
          const start = await range.Start
          const tableHtml = this.generateTableString(dyncData.data.tableDataVos)
          await this.wpsApp.Application.ActiveDocument.Range(start, start).PasteHtml({
            HTML: tableHtml
          })
        } else {
          let value = dyncData.data.singleLineVos.find(
            (item) => item?.mergeName === title
          )?.value
          value = value || value === 0 ? value : ' ' // 此处是不是空字符串,而是空格,如果传空字符串会导致内容错乱。
          range.Text = `${value}`
        }
      }
    },

image.png image.png

1 Answers

你好,可以尝试以下方式

  1. 控件设置前需await window.jssdk.ready()
  2. 建议排查下上述代码里的异步逻辑是否存在取不到value的情况
  3. 先移除if else判断代码,直接使用range.Text="测试是否写入",检验第一次是否渲染