本文將介紹如何配置文字情境中常見的幾種情況。
如何限制使用者只能修改指定位置內容
在文字組件(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文檔的合并。