本帖最后由 Joestar.Xu 于 2024-1-3 15:44 编辑
部分客户可能会需要在编辑完单元格后将当前编辑的单元格的Formatter设置为文本或小数,这个需求有多种实现方式,这里主要介绍两种:
第一种:通过监听EditEnded事件,在这个事件中设置单元格的Formatter,但是这样会遇到一个问题,通过代码设置的Formatter无法撤销。
如果这个时候又想撤销要怎么做呢?
可以将设置Formatter的操作封装为一个Command,然后在EditEnded这个事件中执行这个Command,就可以使用Crtl+Z来撤销了。
但是这样会带来另一个问题,我需要撤销两次才可以将单元格中的值清除掉。这是因为第一次撤销的时候只撤销了Formatter的设置,只有第二次撤销的时候才会清除单元格中的值。那么有没有一个两全其美的办法呢?
第二种:通过重写editCell命令来实现。
editCell命令会在设计器编辑单元格的时候触发,我们可以重写editCell命令的execute方法来实现这个功能,核心代码如下:
- let editCellCommand = spread.commandManager().getCommand("editCell");
- let oldExecute = editCellCommand.execute;
- editCellCommand.execute = function (context, propertyName, args) {
- oldExecute.call(this, context, propertyName, args);
- let row = context.getActiveSheet().getActiveRowIndex();
- let col = context.getActiveSheet().getActiveColumnIndex();
- let cell = context.getActiveSheet().getCell(row, col);
- cell.formatter("@");
- };
复制代码
这样就既可以实现编辑完单元格后设置Formatter的需求,也能实现只撤销一次的需求了。
|
|