深色模式
控制台
在日常的业务中,我们可能接到需求,比如需要对文档关键内容进行提取,或者是批量插入大量格式文本,或者需要将 A 文档与 B 文档合并,或者将 A 文档内容同步到 B 文档中。
对于此类场景,涉及到的技术点主要有两个:
庆幸的是 WebOffice 已经对上述技术做了完备的支持。利用现在流行的 web 技术,我们提供的接口可将文档内容与 HTML 内容互相转化。
在下面的例子中,我们将实现一个将 A 文档与 B 文档合并的例子。
首先,我们可以通过 ActiveDocument.Range(Start, End).GetHtmlData()
获取 A 文档中的 HTML 数据:
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 文档中:
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()
将位置定位过去:
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
,参考:文档用户权限