找回密码
 立即注册

QQ登录

只需一步,快速开始

qunma

高级会员

149

主题

347

帖子

1182

积分

高级会员

积分
1182

微信认证勋章

qunma
高级会员   /  发表于:2020-6-16 15:26  /   查看:4010  /  回复:8
撤销注册的事件里设置了setDefaultStyle不可以撤销。

8 个回复

倒序浏览
Fiooona
论坛元老   /  发表于:2020-6-16 15:41:03
沙发
不太明白您的描述,通过API 进行页面上的修改是无法撤销的,可以说明下您的业务需求,提供下具体实现的代码~
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
qunma
高级会员   /  发表于:2020-6-17 10:40:49
板凳
本帖最后由 qunma 于 2020-6-17 10:48 编辑

setDefaultStyle(){
  const activeSheet = this.spread.getActiveSheet();
  const defaultStyle = activeSheet.getDefaultStyle(GC.Spread.Sheets.SheetArea.viewport)
  defaultStyle.font = 'italic 700 13.3333px Calibri'
  activeSheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport);
}


this.registerCommand('setDefaultStyle',this.setDefaultStyle, [])


registerCommand(cmdName, operateFun, params) {
      let that = this;
      // 如果不存在该指令则注册
      if (!this.spread.commandManager()[cmdName]) {
        let _this = this;
        this.spread.commandManager().register(cmdName,
          {
            canUndo: true,
            execute: function (context, options, isUndo) {
              var Commands = GC.Spread.Sheets.Commands;
              // 在此加cmd名称
              options.cmd = cmdName;
              if (isUndo) {
                // isUndo 为true时,调用undoTransaction
                Commands.undoTransaction(context, options);
                that.captureUndoCommand(options);//捕获撤销的指令 根据个别指令单独去处理数据逻辑
                _this.undoRedoOperate();
                _this.getUndoRedoStatus();//更新撤销和重做的状态
                return true;
              } else {
                // 开始事务
                Commands.startTransaction(context, options);
                operateFun(...options.params)
                // 结束事务
                // spread恢复焦点
                _this.spread.focus()
                Commands.endTransaction(context, options);
                that.captureEndCommand(options);//捕获重做的指令 根据个别指令单独去处理数据逻辑
                _this.undoRedoOperate();
                _this.getUndoRedoStatus();//更新撤销和重做的状态
                return true;
              }
            }
          });
      }

      let activeSheet = this.spread.getActiveSheet()
      // 执行指令
      this.spread.commandManager().execute({
        cmd: cmdName,
        params,
        sheet: activeSheet,
        ranges: activeSheet.getSelections(),
        sheetName: activeSheet.name()
      });
    },
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-6-17 15:29:45
地板
按照您的逻辑是不能复现,具体哪里出的问题还需要再花时间看一下,有结果在这里回复您
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
qunma
高级会员   /  发表于:2020-6-17 16:03:57
5#
Fiooona 发表于 2020-6-17 15:29
按照您的逻辑是不能复现,具体哪里出的问题还需要再花时间看一下,有结果在这里回复您

好的,如果不是setDefaultStyle去改style,是可以撤销的。我看了setDefaultStyle也是走的setStyle,setStyle是可以撤销的,唯一的区别是参数。row,col,都是-1,所以没看出来问题。等大神消息。
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-6-17 18:21:46
6#
好的,预计明日给您答复
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-6-18 10:09:29
7#
有可能是产品的bug , 已经提交给研发同事,有结果会在这里更新(4672)
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
qunma
高级会员   /  发表于:2020-6-18 14:57:34
8#
Fiooona 发表于 2020-6-18 10:09
有可能是产品的bug , 已经提交给研发同事,有结果会在这里更新(4672)

好的。我是不是又可以来个1000金币了  哈哈,期待

评分

参与人数 1金币 +666 收起 理由
Fiooona + 666 感谢您的支持!

查看全部评分

回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2020-6-18 15:32:14
9#
结果来了:
产品设计如此,通过以下代码可以实现您要的效果:
  1. const activeSheet = spread.getActiveSheet();
  2. const defaultStyle = activeSheet.getDefaultStyle(GC.Spread.Sheets.SheetArea.viewport);
  3. const changeDefaultStyle = defaultStyle.clone();
  4. changeDefaultStyle.font = 'italic 700 13.3333px Calibri';
  5. changeDefaultStyle.backColor = "red";
  6. activeSheet.setDefaultStyle(changeDefaultStyle, GC.Spread.Sheets.SheetArea.viewport);
复制代码
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部