找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-5-4 01:12  /   查看:1983  /  回复:1
原因:

目前的在线表格编辑器内部所有的添加图表实现,都是基于单独选择范围的,尚不支持多选。多选会出现添加图表结果不正确的情况(可以通过后续的操作单独调整正确)。所以基于这种情况,我们可以在用户添加图表的时候进行判断用户的选择范围个数,大于1就是多选,这个时候就要给用户予以提示。
思路:
修改添加图表的命令,在用户添加图表的时候给予提示,并阻止此次操作
image.png645578307.png

首先找到所有添加图表相关的command,然后设置到一个数组里:
  1. var commandArray = ["insertChart","clusteredColumnChart","stackedColumnChart","stackedColumn100Chart","clusteredBarChart","stackedBarChart","stackedBar100Chart",
  2.                                                                 "treemapChart","sunburstChart","funnelChart","stockHLCChart","stockOHLCChart","stockVHLCChart","stockVOHLCChart","radarChart","radarWithMarkersChart",
  3.                                                                 "filledRadarChart","lineChart","lineStackedChart","lineStacked100Chart","lineMarkersChart","lineMarkersStackedChart","lineMarkersStacked100Chart",
  4.                                                                 "areaChart","areaStackedChart","areaStacked100Chart","pieChart","doughnutChart","comboChartColumnAndLine","comboChartColumnAndArea","comboChartColumnAndLineAxis",
  5.                                                                 "scatterChart","scatterSmoothMarkersChart","scatterSmoothChart","scatterStraightMarkersChart","scatterStraightChart","bubbleChart"];
复制代码
然后循环数组修改command中的execute方法,在方法中判断选择区域数量,并予以提示
  1. for(var i = 0; i < commandArray.length; i++){
  2.                                 var insertChartCmd = GC.Spread.Sheets.Designer.getCommand(commandArray[i]);
  3.                                 insertChartCmd.oldExecute = insertChartCmd.execute;
  4.                                 insertChartCmd.execute = function (context) {
  5.                                 let spread = context.getWorkbook();
  6.                                 let sheet = spread.getActiveSheet();
  7.                                 let sels = sheet.getSelections();
  8.                                         if (sels.length > 1) {
  9.                                                 GC.Spread.Sheets.Designer.showMessageBox("插入图表不支持多选", "插入图表", 3);
  10.                                         } else {
  11.                                                 this.oldExecute.apply(this, arguments);
  12.                                         }
  13.                                 }
  14.                                
  15.                                 config.commandMap[commandArray[i]] = insertChartCmd;

  16.                         }
复制代码
这里面值得注意的是由于是循环,并且方法中用了apply去执行修改前的逻辑。这个时候一定要将修改前的逻辑记在方法的一个自定义属性中接住(否则真正执行的时候因为循环已经走完了,老的逻辑就找不到了)

完整的demo请参考附件

demo(2).zip

2.48 MB, 下载次数: 278

1 个回复

倒序浏览
MillionDream
注册会员   /  发表于:2023-5-6 15:46:02
沙发
大佬太强了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部