Skip to content

文档内容提取和批量填充

在日常的业务中,我们可能接到需求,比如需要对文档关键内容进行提取,或者是批量插入大量格式文本,或者需要将 A 文档与 B 文档合并,或者将 A 文档内容同步到 B 文档中。

对于此类场景,涉及到的技术点主要有两个:

  1. 文档内容的提取解析,提取的过程可能需要保留原格式
  2. 文档内容批量填充,这里的内容可能是带格式的

庆幸的是 WebOffice 已经对上述技术做了完备的支持。利用现在流行的 web 技术,我们提供的接口可将文档内容与 HTML 内容互相转化。

在下面的例子中,我们将实现一个将 A 文档与 B 文档合并的例子。

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

js
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 文档中:

js
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() 将位置定位过去:

js
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 接口依赖剪切板能力,需要文档开启复制权限。开启方式:回调服务的 GET /v3/3rd/files/:file_id/permission 接口返回字段 copy 置为 1,参考:文档用户权限