跳到主要内容

限制表格区域的编辑

功能说明

表格第一行是表头,固定不允许修改,剩下行是数据区域,允许修改。

代码示例

var app;

// 初始化
async function init(url, selector) {
app = await ZOfficeSDK.mount(url, selector, true);
await app.ready();

// 开启区域编辑保护
await app.ActiveDocument.protect(Word.ProtectionType.EditArea);
await protectForTable();
}

// 允许表格第 2 行到最后一行允许编辑,其他区域不允许编辑
async function protectForTable() {
const table = await getTableByBookmark('bookmarkName');
// const table = await getTableByTitle('title'); 或者通过表格标题获取表格

const rowCount = await table.Rows.count;
const sRow = await table.Rows.item(2); // 获取表格第 2 行
const eRow = await table.Rows.item(rowCount); // 获取表格最后一行
const sRowRange = await sRow.range;
const eRowRange = await eRow.range;
const range = await app.ActiveDocument.getSelection();
range.buildRange(sRowRange.start, eRowRange.end); // 构建表格第 2 行到最后一行的 Range

// 限制该表格第 2 行到最后一行允许编辑,其他区域不允许编辑
// 只允许某些人可编辑,第二个参数改为 { "user": ["userId", "userId"] } 即可
await app.ActiveDocument.PermMarks.add(
'保护区域名字',
{"group": ["everyone"]},
range
);
}

// 表格在某个书签内,通过书签获取表格
async function getTableByBookmark(bookmarkName) {
const bm1 = await app.ActiveDocument.Bookmarks.item(bookmarkName);
const range = await bm1.range;
const table = await range.Tables.item(1);
return table;
}

// 表格设置了标题,通过表格标题获取表格
// 表格标题有两种设置方式:
// 1. 通过 SDK API 设置:Table.setTitle('xxx')
// 2. 鼠标右键表格 -> 表格属性 -> 输入标题
async function getTableByTitle(title) {
const table = await app.ActiveDocument.Tables.item(title);
return table;
}