找回密码
 立即注册

QQ登录

只需一步,快速开始

卑微的打工狗
金牌服务用户   /  发表于:2024-6-5 15:58  /   查看:203  /  回复:3
1金币


之前根据公司业务需要,更改了右键单击单元格的 清除内容 功能。
以下是有效代码

  1. designerConfig.contextMenu[28] = "gc.spread.contextMenu.clearContents1";
  2.             let newCommand = GC.Spread.Sheets.Designer.getCommand(
  3.                 GC.Spread.Sheets.Designer.CommandNames.ClearContents
  4.             );

  5.             if (newCommand) {
  6.                 newCommand.commandName = "gc.spread.contextMenu.clearContents1";
  7.                 newCommand.execute = function (context, propertyName, args) {
  8.                     var spread = context.getWorkbook();

  9.                     // 以下两行代码是 把显示的图片置空,实际上是修改单元格为文本类型
  10.                     var cellType = new GC.Spread.Sheets.CellTypes.Text();
  11.                     spread.getActiveSheet().setCellType(args.activeRow, args.activeCol, cellType);


  12.                     // 这里是清除单元格之前的操作
  13.                     spread.commandManager().execute({
  14.                         cmd: "gc.spread.contextMenu.clearContents",
  15.                         activeCol: args.activeCol,
  16.                         activeRow: args.activeRow,
  17.                         commandOptions: args.commandOptions,
  18.                         itemName: "gc.spread.contextMenu.clearContents",
  19.                         selections: args.selections,
  20.                         sheetName: args.sheetName,
  21.                         tableName: args.tableName,
  22.                     });
  23.                     // 清除单元格之后的操作
  24.                     spread.getActiveSheet().setValue(args.activeRow, args.activeCol, "");
  25.                     spread.getActiveSheet().repaint();
  26.                 };
  27.             }
  28.             designerConfig.commandMap["gc.spread.contextMenu.clearContents1"] =
  29.                 newCommand;
复制代码


从15升级到17之后发现,页面上右键会有两个清除内容。请问如何更改为一个,并保留新添加的功能?

image.png340916442.png image.png165684508.png

3 个回复

倒序浏览
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-6-5 18:18:47
沙发
这个是因为在17版本,增加了reportsheet的菜单,您在控制台输入
  1. GC.Spread.Sheets.Designer.DefaultConfig
复制代码



image.png862563781.png

如上图所示,发现designerConfig.contextMenu[28] 不再是”gc.spread.contextMenu.clearContents“
所以这里的数值不要写死,你们要去遍历,然后去检查是不是要重写的菜单,如
  1. designerConfig.contextMenu.forEach((item, index) => {
  2.     if (item == 'gc.spread.clearContents') {
  3.         //业务逻辑,如  designerConfig.contextMenu[index] = "gc.spread.contextMenu.clearContents1";
  4.     } else {
  5.         return item;
  6.     }
  7. })
复制代码


回复 使用道具 举报
卑微的打工狗
金牌服务用户   /  发表于:2024-6-13 16:06:50
板凳
Ellia.Duan 发表于 2024-6-5 18:18
这个是因为在17版本,增加了reportsheet的菜单,您在控制台输入

您好,根据您提示的代码,我把项目代码更改为一下
  1. let ind = 0
  2.             designerConfig.contextMenu.forEach((item, index) => {
  3.                 if (item == 'gc.spread.contextMenu.clearContents') {
  4.                     ind = index
  5.                 }
  6.             })
  7.             designerConfig.contextMenu[ind] = "gc.spread.contextMenu.clearContents";

  8.             let newCommand = GC.Spread.Sheets.Designer.getCommand(
  9.                 GC.Spread.Sheets.Designer.CommandNames.ClearContents
  10.             );
  11.             if (newCommand) {
  12.                 newCommand.commandName = "gc.spread.contextMenu.clearContents";
  13.                 newCommand.execute = function (context, propertyName, args) {
  14.                     console.log('123')

  15.                     var spread = context.getWorkbook();

  16.                     // 以下两行代码是 把显示的图片置空,实际上是修改单元格为文本类型
  17.                     var cellType = new GC.Spread.Sheets.CellTypes.Text();
  18.                     spread.getActiveSheet().setCellType(args.activeRow, args.activeCol, cellType);


  19.                     // 这里是清除单元格之前的操作
  20.                     spread.commandManager().execute({
  21.                         cmd: "gc.spread.contextMenu.clearContents",
  22.                         activeCol: args.activeCol,
  23.                         activeRow: args.activeRow,
  24.                         commandOptions: args.commandOptions,
  25.                         itemName: "gc.spread.contextMenu.clearContents",
  26.                         selections: args.selections,
  27.                         sheetName: args.sheetName,
  28.                         tableName: args.tableName,
  29.                     });
  30.                     // 清除单元格之后的操作
  31.                     spread.getActiveSheet().setValue(args.activeRow, args.activeCol, null);
  32.                     // this.sheet.setTag(args.row, args.col)
  33.                     // console.log(this.sheet.getTag(args.row, args.col, GC.Spread.Sheets.SheetArea.viewport))
  34.                     spread.getActiveSheet().repaint();

  35.                 };
  36.             }
  37.             designerConfig.commandMap["gc.spread.contextMenu.clearContents"] =
  38.                 newCommand;
复制代码
但我发现,再使用“清除内容”的时候,console.log('123') 并没有打印。

请问是写法上还存在着什么问题吗?

另外,15版本上,我看  designerConfig.contextMenu[28]个是  gc.spread.contextMenu.clearContents1
而17斑斑上,designerConfig.contextMenu[30]个是  gc.spread.contextMenu.clearContents
请问 gc.spread.contextMenu.clearContents 与gc.spread.contextMenu.clearContents1,是有什么特殊含义吗?



回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2024-6-13 16:51:45
地板
您好,请参考附件中的demo

gc.spread.contextMenu.clearContents1 是重写gc.spread.contextMenu.clearContents。

自定义菜单-重写清除内容.html

5.32 KB, 下载次数: 5

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部