主题
将 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/