找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2024-9-10 14:39  /   查看:452  /  回复:0
本帖最后由 AlexZ 于 2024-10-9 12:04 编辑


数据透视表的值字段名称用户可以自己来进行设置。在 SpreadJS 中,对于名称没有做任何限制。可以和透视表数据字段重名

但是, 在excel中,会有上述的限制,不允许重名(参考下图)
image.png646363830.png

如果出于兼容性考虑,想要加上相同的限制的话,可以通过对相关的“UpdatePivotValueFieldCmd”命令进行重写。来实现类似的限制

下面是关键代码,
1.对UpdatePivotValueFieldCmd原来执行的方法进行了获取,
2.在重写的command中,先判断值字段名称是否和数据字段重名
3.如果重名则结束执行命令,如果不重名则执行原有的方法
  1. //重写UpdatePivotValueFieldCmd命令
  2.       oldExcute= GC.Spread.Sheets.Commands.UpdatePivotValueFieldCmd.execute;
  3.       var newExcute=function (context, options, isUndo) {
  4.             oldExcute (context, options, isUndo) ;
  5.             return false;
  6.       }

  7.       let NewUpdatePivotValueFieldCmd = {
  8.             canUndo: true,
  9.             name: "UpdatePivotValueFieldCmd",
  10.             execute: function (context, options, isUndo) {
  11.                   console.log(options);
  12.                   let Commands = GC.Spread.Sheets.Commands;
  13.                   if (isUndo) {
  14.                         Commands.undoTransaction(context, options);
  15.                         return true;
  16.                   } else {
  17.                         
  18.                         let sheet = context.getSheetFromName(options.sheetName);
  19.                         
  20.                         let pt=sheet.pivotTables.get(options.cmdOption.pivotName)
  21.                         var fileds=pt.getSourceFields();
  22.                         const hasValueFieldName = fileds.some(obj => obj.name === options.cmdOption.fieldName);
  23.                         if(hasValueFieldName){
  24.                               alert("值字段和已有字段名称不能重复");
  25.                               return false;
  26.                         }
  27.                         Commands.startTransaction(context, options);

  28.                         newExcute(context, options, isUndo);
  29.                         
  30.                         Commands.endTransaction(context, options);
  31.                         return true;
  32.                   }
  33.             },
  34.       };

  35.       spread.commandManager().register("UpdatePivotValueFieldCmd", NewUpdatePivotValueFieldCmd);
复制代码


完整的代码可以参考下面的demo

custom_UpdatePivotValueFieldCmd.zip (1.77 KB, 下载次数: 18)

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部