本文将介绍如何配置文字场景中常见的几种情况。
如何限制用户只能修改指定位置内容
在文字组件(Word)中,如何限制用户只能修改指定位置内容?
创建
.docx
格式文件,目前仅有该格式支持开启内容控件。编写文档正文。
在需要的位置插入内容控件。
点击按钮「审阅」-「限制编辑」进行限制。
如何查询文本位置和进行文本替换
查询指定文本的位置
通过Range获取全文文本。注意这个方法可以使用
(0, 10000)
之类的,看具体查询范围。通过 JavaScript 查找到对应的模板内容,获取开始位置之类的(例如 JavaScript 字符串的
find
方法)。
替换文本
通过修改文本替换文本。
如何移动光标到指定文本
定位文字:
const info = await app.ActiveDocument.Find.Execute('WebOffice'); // 返回 [{ pos: 16, len: 2 }]
。获取
pos
位置信息:const pos = info[0].pos;
。移动光标:
await app.ActiveDocument.Range.SetRange(pos, pos);
。
async function example() {
await instance.ready();
const app = instance.Application;
// 1. 搜索并高亮文本
const findResult = await app.ActiveDocument.Find.Execute('WebOffice');
// 2. 获取位置信息
const { pos } = findResult[0];
// 3. 获取区域对象
const range = await app.ActiveDocument.Range.SetRange(pos, pos);
}
async function example() {
// 前面步骤同上,代码省略
// 4. 滚动文档窗口, 显示指定的区域
await app.ActiveDocument.ActiveWindow.ScrollIntoView(range);
}
如何将 A 文档内容同步到 B 文档
在日常的业务中,我们可能接到需求,需要将 A 文档与 B 文档合并,或者将 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()
将位置定位过去:
GetHtmlData
接口依赖剪切板能力,需要文档开启复制权限。开启方式:后端file/info
回调接口user_acl.copy
置为1
。
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文档的合并。