Joestar.Xu 发表于 2023-12-28 16:21:01

如何实现编辑单元格后自动设置格式(Formatter)

本帖最后由 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的需求,也能实现只撤销一次的需求了。

页: [1]
查看完整版本: 如何实现编辑单元格后自动设置格式(Formatter)