Skip to content

将 A 文档内容同步到 B 文档

在日常的业务中,我们可能接到需求,需要将 A 文档与 B 文档合并,或者将 A 文档内容同步到 B 文档中

首先,我们可以通过 ActiveDocument.Range(Start, End).GetHtmlData() 获取 A 文档中的 HTML 数据:

//@file=base.docx
async function example() {
  await instance.ready()

  const app = instance.Application

  // 获取选中区域
  const range = await app.ActiveDocument.Range(10, 20)

  // 获取指定区域的带格式 HTML 数据
  const htmlInfo = await range.GetHtmlData()
  console.log(htmlInfo)
}

htmlInfo 的返回值如下:{ HTML, Text }

属性数据类型说明
HTML
String
HTML 数据
Text
String
文本数据

然后,根据获取的 HTML 数据,我们可以通过 ActiveDocument.Range(Start, End).PasteHtml({ HTML }) 将它粘贴到 B 文档中:

//@file=base.docx
async function example() {
  await instance.ready()

  const app = instance.Application

  // 获取选中区域
  const range = await app.ActiveDocument.Range(10, 20)

  // 获取指定区域的带格式 HTML 数据
  const htmlInfo = await range.GetHtmlData()

  // 粘贴带格式的 HTML 数据到指定区域
  await app.ActiveDocument.Range(110, 110).PasteHtml({
    HTML: htmlInfo.HTML
  })
}

最后,如果我们需要确定文档的末尾,可以通过 ActiveDocument.GetDocumentRange() 来获取全文 Range,并通过 Range.SetRange() 将位置定位过去:

//@file=base.docx
async function example() {
  await instance.ready()

  const app = instance.Application

  // 获取选中区域
  const DocumentRange = await app.ActiveDocument.GetDocumentRange()

  // 获取末尾
  const End = await DocumentRange.End

  // 定位到末尾
  await app.ActiveDocument.Range(0, 1).SetRange({
    Start: End,
    End: End
  })
}

这样,就可以将 A 文档的内容全部丢到 B 文档末尾了,或者通过这种手法,实现前端方式的将 A、B 文档合并

参考文档:

需要注意的是:GetHtmlData 接口依赖剪切板能力,需要文档开启复制权限。开启方式:后端 file/info 回调接口 user_acl.copy 置为 1,参考:https://wwo.wps.cn/docs/server/callback-api-standard/get-file-metadata/