学AI代码笔记【009】号
AI知识库:WPS知识库 加入知识库
学习笔记整理:AI学WPS代码笔记【整理】
学习笔记查看:AI学WPS代码笔记【查看】
发帖:WPS多维表格 | WPS Office官方社区
WPS开放平台:API简介 | WPS开放平台
9.2025年08月21日 星期四学AI代码笔记【009】号
主要内容
🔔 | 监听重命名数据表的事件 监听重命名数据表的事件 | WPS开放平台 监听删除数据表的事件 监听删除数据表的事件 | WPS开放平台 和昨天的很类似,表达式: OnCreateSheet(Callback),表达式.OnRename(Callback),表达式.OnDelete(Callback) 回过头看,就是在新增,重命名和删除的前面加了一个on。 相当于加一个on就是监听。其他的估计也是类似的情况,触类旁通。 我让ai给我假设一个场景: 在实际场景中,监听删除数据表、重命名数据表和增加数据表的事件可以组合使用,以实现对数据表操作的全面监控与自动化处理。以下是一个实际场景思路: 场景描述 假设你正在开发一个企业内部的项目管理系统,该系统基于 WPS 数据表进行构建。为了确保数据表的完整性、记录用户的操作行为,并实时更新相关统计信息(如表格数量、命名规范等),你需要监听以下三种事件:
实现思路
在脚本启动时,为整个工作簿的Sheets集合绑定三个事件监听器,分别用于监听新增、重命名和删除数据表的操作。每个监听器都需定义一个回调函数,用于处理事件触发后的逻辑。
当用户通过 API 或界面新增数据表时,触发OnCreateSheet事件。回调函数应记录新增表的基本信息(如表名和类型),并将其存入日志系统或数据库中。此外,还需更新全局统计变量,例如当前数据表总数。
当用户修改数据表名称时,触发OnRename事件。回调函数应捕获原表名和新表名,检查新表名是否符合命名规范(如避免重复或非法字符)。如果不符合规范,则提示用户修改;如果符合,则更新系统中的相关引用。
当用户删除数据表时,触发OnDelete事件。回调函数应记录被删除表的 ID ,检查是否有其他依赖项(如公式或引用)需要同步清理。同时,更新全局统计变量以反映最新的数据表状态。
每次事件触发后,将操作详情记录到日志文件中,包括操作时间、操作人、操作类型(新增、重命名、删除)及相关参数。如果某些操作可能导致数据不一致(如删除关键表),可通过弹窗或消息通知用户确认。
为了防止资源浪费或事件冲突,在完成所有操作后,主动调用Destroy方法取消事件监听。 |
关键代码
官方代码 监听重命名数据表的事件
function main() {
let eventContext;
eventContext = Application.Sheets(1).OnRename(data => {
console.log(data);
// 取消事件监听
eventContext.Destroy();
});
Application.Sheets(1).Name = 'newName';
//这里会执行OnRename的回调
}
main();
官方代码 监听删除数据表的事件
function main() {
Application.Sheets.Add({ Type: 'xlEtDataBaseSheet' });
let eventContext;
eventContext = Application.Sheets(1).OnDelete(data => {
console.log(data);
// 取消事件监听
eventContext.Destroy();
});
Application.Sheets(1).Delete(true);
//这里会执行OnDelete的回调
}
main();
根据思路编写的代码,结合了监听新增、重命名和删除数据表的事件
function main() {
let createSheetEventContext, renameSheetEventContext, deleteSheetEventContext;
// 监听新增数据表的事件
createSheetEventContext = Application.Sheets.OnCreateSheet(data => {
console.log("新增数据表:", data); // 记录新增表的信息
const newSheet = data.Sheet;
console.log(`新增表名: ${newSheet.Name}, 类型: ${newSheet.Type}`);
// 更新全局统计变量(示例)
updateGlobalStatistics("add", newSheet.Name);
});
// 监听重命名数据表的事件
renameSheetEventContext = Application.Sheets(1).OnRename(data => {
console.log("重命名数据表:", data); // 记录原始表名和新表名
const originName = data.originValue;
const newName = data.value;
console.log(`原表名: ${originName}, 新表名: ${newName}`);
// 检查命名规范并更新相关引用
if (validateSheetName(newName)) {
console.log("新表名符合规范");
} else {
console.warn("新表名不符合规范,请修改");
}
});
// 监听删除数据表的事件
deleteSheetEventContext = Application.Sheets(1).OnDelete(data => {
console.log("删除数据表:", data); // 记录被删除表的 ID
const deletedSheetId = data.sheetId;
console.log(`被删除表的 ID: ${deletedSheetId}`);
// 从全局统计中移除该表
updateGlobalStatistics("remove", deletedSheetId);
});
// 示例操作:新增数据表
Application.Sheets.Add({ Type: 'xlEtDataBaseSheet' }); // 这里会触发 OnCreateSheet 回调
// 示例操作:重命名数据表
Application.Sheets(1).Name = 'NewSheetName'; // 这里会触发 OnRename 回调
// 示例操作:删除数据表
Application.Sheets(1).Delete(true); // 这里会触发 OnDelete 回调
// 取消所有事件监听
createSheetEventContext.Destroy(); // 取消新增数据表的监听
renameSheetEventContext.Destroy(); // 取消重命名数据表的监听
deleteSheetEventContext.Destroy(); // 取消删除数据表的监听
}
// 更新全局统计变量的示例函数
function updateGlobalStatistics(action, detail) {
if (action === "add") {
console.log(`全局统计: 新增数据表 "${detail}"`);
} else if (action === "remove") {
console.log(`全局统计: 删除数据表 ID "${detail}"`);
}
}
// 验证表名是否符合规范的示例函数
function validateSheetName(name) {
const invalidChars = /[\/\\?*[\]:]/; // 禁止使用的字符
return !invalidChars.test(name);
}
main();
社区管理员