找回密码
 立即注册

QQ登录

只需一步,快速开始

Lynn.Dou 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-2-28 11:25  /   查看:2190  /  回复:0
需求:在存在多行列头的前提下,通过右键操作,获取所选中的某列头单元格的值。

思路:
监听onOpenMenu获取打开右键菜单的单元格行列信息。
由于是多行列头,可能存在合并单元格的情况,所以要对合并单元格做出判断。

主要代码如下:
  1. function MyContextMenu() {}
  2.             MyContextMenu.prototype = new GC.Spread.Sheets.ContextMenu.ContextMenu(spread);
  3.             MyContextMenu.prototype.onOpenMenu = function (menuData, itemsDataForShown, hitInfo, spread) {
  4.                 // 获取行列信息
  5.                 console.log(hitInfo);
  6.                 var worksheetHitInfo = hitInfo.worksheetHitInfo;
  7.                 // 表示选择的是列头右键菜单
  8.                 if(worksheetHitInfo.rowViewportIndex == -1) {
  9.                     // 获取行列索引
  10.                     var row = worksheetHitInfo.row;
  11.                     var col = worksheetHitInfo.col;
  12.                     // 判断是否为合并单元格,如果是则获取合并单元格左上角单元格的row、col,进一步获取合并单元格的实际value
  13.                     var range = new GC.Spread.Sheets.Range(row,col,1,1);
  14.                     var spanArr = sheet.getSpans(range, GC.Spread.Sheets.SheetArea.colHeader);
  15.                     if(spanArr.length > 0) {
  16.                         console.log(spanArr[0]);
  17.                         var relRow = spanArr[0].row;
  18.                         var relCol = spanArr[0].col;
  19.                         var relValue = sheet.getValue(relRow, relCol, GC.Spread.Sheets.SheetArea.colHeader);
  20.                         alert("选择列头单元格的值为" + relValue);
  21.                     } else {
  22.                         var value = sheet.getValue(row, col, GC.Spread.Sheets.SheetArea.colHeader);
  23.                         alert("选择列头单元格的值为" + value);
  24.                     }

  25.                 }

  26.             };
  27.             var contextMenu = new MyContextMenu();
  28.             spread.contextMenu = contextMenu;
复制代码
最终效果如下图:

完整代码请参考附件demo
2.gif

demo.html

4.46 KB, 下载次数: 66

0 个回复

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