在WPS官方的开放平台宏编辑器API中有关于事件的详细描述,包括:表格事件、文字事件、演示事件、控件事件,本文只阐述表格事件相关的知识点,比如:都有哪些表格事件,如何通过JS编程来捕获事件、处理事件,以实现我们对表格的特殊处理。
1、开放平台对事件的描述
通过 WPS宏编辑器能够对 WPS 应用程序发出的事件添加 JavaScript 方法进行处理。 在通知型事件中,可以接收已经发生变化,比如通过WindowActivate事件,可以对文档的切换做一些功能性处理; 在询问型事件中,可以控制是否继续执行当前操作,比如通过WorkbookBeforeClose事件,可以取消文档的关闭。
1)找到WorkbookBeforeClose事件
2)处理事件
function Application_WorkbookBeforeClose(Wb, Cancel)
{
if (!Wb.Saved) {
MsgBox("请先保存文档!")
Cancel.Value = true;
}
}
3)查看效果
当表格工作簿有内容变动未保存时,关闭该工作簿就会提示:请先保存文档,点击确定按钮后会取消关闭。
- 如图所示,内容变动未保存,工作簿标签栏会有一个如红框所示小图标。
- 关闭工作簿,就会弹出如下提示框:
- 点击确定按钮后,会取消关闭
2、Application 事件
1)事件列表
名称 | 触发时机 |
---|---|
NewWorkbook | 当新建工作簿时触发此事件。 |
SheetActivate(Sh) | 当激活任一工作表时触发此事件。 |
SheetBeforeDelete(Sh) | 当删除任一工作表之前触发 此事件。 |
SheetBeforeDoubleClick(Sh, rg, cancel) | 当双击任一工作表之前触发此事件。 |
SheetBeforeRightClick(Sh, rg, cancel) | 当右击任一工作表之前触发此事件 。 |
SheetCalculate(Sh) | 在任一工作表进行计算时触发此事件。 |
SheetChange(Sh, rg) | 当用户或外部链接更改了任一工作表中的单元格时触发此事件。 |
SheetDeactivate(Sh) | 当任一工作表被切换到非激活状态时 触发此事件。 |
SheetFollowHyperlink(Sh, Target) | 单击任一工作表的超链接时触 发此事件。 |
SheetSelectionChange(Sh, Target) | 任一工作表上的选定区域发生更改时,将触发此事件。 |
WindowActivate(Wb, Wn) | 任一工作簿窗口被激活时,将触发此事件。 |
WindowDeactivate(Wb, Wn) | 任一工作簿窗口被切换到非激活状态时 触发此事件。 |
WindowResize(Wb, Wn) | 任一工作簿窗口调整大小时将触发此事件。 |
WorkbookActivate(Wb) | 任一工作簿被激活时,将触发此事件。 |
WorkbookAfterSave(Wb, Success) | 任一工作簿被保存之后触发此事件。 |
WorkbookBeforeClose(Wb, Cancel) | 任一打开的工作簿关闭之前触发此事件。 |
WorkbookBeforePrint(Wb, Cancel) | 在打印任一打开的工作簿之前触发此事件。 |
WorkbookBeforeSave(Wb, SaveAsUI, Cancel) | 任一工作簿被保存之前触发 此事件。 |
WorkbookDeactivate(Wb) | 任一工 作簿被切换到非激活状态时触发此事件。 |
WorkbookNewSheet(Wb, Sh) | 在任一打开的工作簿中创建新工作表时触发此事件。 |
WorkbookOpen(Wb) | 当打开一个工作簿时触发此事件。 |
2)参数通用解释
- Wb,Workbook,工作簿
- Wn,Window,窗口对象
- Sh,Object,工作表
- rg,Range对象,单元格对象
- cancel,Object,如果设置其属性Value为 true,则取消本次操作。
- SaveAsUI,Boolean,如果为true则表示此次保存操作将会弹出保存或是另存为对话框
- Success,Boolean,结果是true还是false
3)具体事件说明请参考wps开放平台说明
3、Workbook事件
1)事件列表
名称 | 触发时机 |
---|---|
Activate | 该工作簿被激活时,将触发此事件。 |
AfterSave(Success) | 该工作簿被保存之后触发此事件。 |
BeforeClose(Cancel) | 该工作簿关闭之前触发此事件。 |
BeforePrint(Cancel) | 该工作簿打印之前触发此事件。 |
BeforeSave(SaveAsUI, Cancel) | 该工作簿保存之前触发此事件。 |
Deactivate | 该工作簿被切换到非激活状态时触发此事件。 |
NewSheet(Sh) | 该工作簿中创建新工作表时触发此事件。 |
Open | 该工作簿打开时触发此事件。 |
SheetActivate(Sh) | 当激活该工作簿任一工作表时触发 此事件。 |
SheetBeforeDelete(Sh) | 删除该工作簿任一 工作表之前触发此事件。 |
SheetBeforeDoubleClick(Sh, rg, cancel) | 双击该工作簿任一工作表之前 触发此事件。 |
SheetBeforeRightClick(Sh, rg, cancel) | 右击该工作簿任一工作表之前 触发此事件。 |
SheetCalculate(Sh) | 在该工作簿任一工作表进行 计算时触发此事件。 |
SheetChange(Sh, rg) | 当用户或外部链接更改了该工作簿任一 工作表中的单元格时触发此事件。 |
SheetDeactivate(Sh) | 当该工作簿任一 工作表被切换到非激活状态时触发此事件。 |
SheetFollowHyperlink(Sh, Target) | 单击该工作簿任一 工作表的超链接时触发 此事 件。 |
SheetSelectionChange(Sh, Target) | 该工作簿任一工作表上的选定区域发生更改时,将触发此事件。 |
2 )参数基本同Application事件
3)具体事件说明请参考wps开放平台说明
4、Application、Workbook事件关系
我们不难发现很多事件在Application、Workbook中都有,比如Application.WorkbookActivate(Wb), Workbook.Activate()都表示工作簿激活时会触发该事件,那么两者到底什么关系?
- Application可以理解是表格应用级别的,所有工作簿激活都会触发该事件;
- Workbook只对当前工作簿本身生效;
- 如果同一事件在Application、Workbook都有捕捉处理,则先触发Workbook,后触发Application,如下案例所示
function Application_WorkbookActivate(Wb)
{
MsgBox("Application event: " + Wb.Name + " is avtived!");
}
function Workbook_Activate()
{
MsgBox("Workbook event: " + ActiveWorkbook.Name + " is avtived!");
}
先触发workbook事件
后触发Application事件