学AI代码笔记【009】号


9.2025年08月21日 星期四学AI代码笔记【009】号

主要内容

🔔

监听重命名数据表的事件 监听重命名数据表的事件 | WPS开放平台

监听删除数据表的事件 监听删除数据表的事件 | WPS开放平台

和昨天的很类似,表达式: OnCreateSheet(Callback),表达式.OnRename(Callback),表达式.OnDelete(Callback)

回过头看,就是在新增,重命名和删除的前面加了一个on。

相当于加一个on就是监听。其他的估计也是类似的情况,触类旁通。

我让ai给我假设一个场景:

在实际场景中,监听删除数据表、重命名数据表和增加数据表的事件可以组合使用,以实现对数据表操作的全面监控与自动化处理。以下是一个实际场景思路:

场景描述

假设你正在开发一个企业内部的项目管理系统,该系统基于 WPS 数据表进行构建。为了确保数据表的完整性、记录用户的操作行为,并实时更新相关统计信息(如表格数量、命名规范等),你需要监听以下三种事件:

  1. 监听增加数据表的事件:当用户新增数据表时,触发事件以记录新增表的详细信息,如表名、创建时间等,并将其添加到全局统计中。

  1. **监听重命名数据表的事件:当用户修改数据表名称时,触发事件以记录原始表名和新表名,并同步更新相关引用或关联的数据结构。

  1. 监听删除数据表的事件:当用户删除数据表时,触发事件以记录被删除表的 ID 及其他相关信息,并从全局统计中移除该表。

实现思路

  1. 初始化监听器

在脚本启动时,为整个工作簿的Sheets集合绑定三个事件监听器,分别用于监听新增、重命名和删除数据表的操作。每个监听器都需定义一个回调函数,用于处理事件触发后的逻辑。

  1. 新增数据表的处理流程

当用户通过 API 或界面新增数据表时,触发OnCreateSheet事件。回调函数应记录新增表的基本信息(如表名和类型),并将其存入日志系统或数据库中。此外,还需更新全局统计变量,例如当前数据表总数。

  1. 重命名数据表的处理流程

当用户修改数据表名称时,触发OnRename事件。回调函数应捕获原表名和新表名,检查新表名是否符合命名规范(如避免重复或非法字符)。如果不符合规范,则提示用户修改;如果符合,则更新系统中的相关引用。

  1. 删除数据表的处理流程

当用户删除数据表时,触发OnDelete事件。回调函数应记录被删除表的 ID ,检查是否有其他依赖项(如公式或引用)需要同步清理。同时,更新全局统计变量以反映最新的数据表状态。

  1. 日志记录与通知机制

每次事件触发后,将操作详情记录到日志文件中,包括操作时间、操作人、操作类型(新增、重命名、删除)及相关参数。如果某些操作可能导致数据不一致(如删除关键表),可通过弹窗或消息通知用户确认。

  1. 取消监听的处理

为了防止资源浪费或事件冲突,在完成所有操作后,主动调用Destroy方法取消事件监听。

关键代码

  1. 官方代码 监听重命名数据表的事件

function main() {
    let eventContext;
    eventContext = Application.Sheets(1).OnRename(data => {
        console.log(data);
        // 取消事件监听
        eventContext.Destroy();
    });
    Application.Sheets(1).Name = 'newName';
    //这里会执行OnRename的回调
}
main();
  1. 官方代码 监听删除数据表的事件

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();
  1. 根据思路编写的代码,结合了监听新增、重命名和删除数据表的事件

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();

多维表代码使用案例库

【1】多维表代码使用案例库


湖南省
浏览 1455
收藏
5
分享
5 +1
3
+1
全部评论 3
 
WPS 冲浪队长
WPS 冲浪队长

社区管理员

虽然不是都能看懂 但还是要点赞 多多鼓励产出哦
· 广东省
回复
 
HC.旋
· 福建省
回复
 
峰格
不错
· 山东省
回复