本帖最后由 AlexZ 于 2024-10-9 12:04 编辑
数据透视表的值字段名称用户可以自己来进行设置。在 SpreadJS 中,对于名称没有做任何限制。可以和透视表数据字段重名
但是, 在excel中,会有上述的限制,不允许重名(参考下图)
如果出于兼容性考虑,想要加上相同的限制的话,可以通过对相关的“UpdatePivotValueFieldCmd”命令进行重写。来实现类似的限制
下面是关键代码,
1.对UpdatePivotValueFieldCmd原来执行的方法进行了获取,
2.在重写的command中,先判断值字段名称是否和数据字段重名
3.如果重名则结束执行命令,如果不重名则执行原有的方法
- //重写UpdatePivotValueFieldCmd命令
- oldExcute= GC.Spread.Sheets.Commands.UpdatePivotValueFieldCmd.execute;
- var newExcute=function (context, options, isUndo) {
- oldExcute (context, options, isUndo) ;
- return false;
- }
- let NewUpdatePivotValueFieldCmd = {
- canUndo: true,
- name: "UpdatePivotValueFieldCmd",
- execute: function (context, options, isUndo) {
- console.log(options);
- let Commands = GC.Spread.Sheets.Commands;
- if (isUndo) {
- Commands.undoTransaction(context, options);
- return true;
- } else {
-
- let sheet = context.getSheetFromName(options.sheetName);
-
- let pt=sheet.pivotTables.get(options.cmdOption.pivotName)
- var fileds=pt.getSourceFields();
- const hasValueFieldName = fileds.some(obj => obj.name === options.cmdOption.fieldName);
- if(hasValueFieldName){
- alert("值字段和已有字段名称不能重复");
- return false;
- }
- Commands.startTransaction(context, options);
- newExcute(context, options, isUndo);
-
- Commands.endTransaction(context, options);
- return true;
- }
- },
- };
- spread.commandManager().register("UpdatePivotValueFieldCmd", NewUpdatePivotValueFieldCmd);
复制代码
完整的代码可以参考下面的demo
custom_UpdatePivotValueFieldCmd.zip
(1.77 KB, 下载次数: 18)
|
|