请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Huang SpreadJS 开发认证
超级版主   /  发表于:2024-1-29 14:06  /   查看:157  /  回复:0
本帖最后由 Richard.Huang 于 2024-1-29 14:08 编辑

背景

拖拽复制是Excel常用的功能之一,而隐藏行也是大家常常遇到的场景,我们的行都是连续的,因此在拖拽复制时,会将隐藏行的内容覆盖,而如果用户期望隐藏行的内容不让他的客户去修改和查看,那么拖拽复制就是一个很大的隐患,那么如何操作可以拖拽复制时自动跳过隐藏行呢?

实现方式

我们可以通过监听DragFillBlock事件和DragFillBlockCompleted事件将隐藏行的内容进行存储和回填,从而避免了隐藏行内容被覆盖的问题。
DragFillBlock事件是在拖拽复制填充执行后,内容填写之前触发的,此时我们可以将隐藏行的内容进行存储
  1. spread.bind(GC.Spread.Sheets.Events.DragFillBlock, function (sender, args) {
  2.     // 在这里获取到拖拽的范围,先把隐藏的单元格内容进行存储,只有忽略样式拖拽复制时才能激活以下程序
  3.     var range = args.fillRange;
  4.     let row = range.row;
  5.     let col = range.col;
  6.     let rowCount = range.rowCount;
  7.     let colCount = range.colCount;
  8.     let sheet = spread.getActiveSheet();
  9.     for (let i = row; i < row + rowCount; i++) {
  10.         for (let j = col; j < col + colCount; j++) {
  11.             if (!sheet.getRowVisible(i)) {
  12.                 let cellValues = [i, j, sheet.getValue(i, j)]
  13.                 let cellStyles = [i, j, sheet.getStyle(i, j)]
  14.                 hideCellValues.push(cellValues);
  15.                 hideCellStyles.push(cellStyles);
  16.             }
  17.         }
  18.     }
  19. });
复制代码
在内容填充完成后,我们再将存储的内容回填
  1. spread.bind(GC.Spread.Sheets.Events.DragFillBlockCompleted, function (sender, args) {
  2.     // 在这里把隐藏的单元格内容进行回填
  3.     while (hideCellValues.length > 0) {
  4.         let element = hideCellValues.pop();
  5.         let sheet = spread.getActiveSheet();
  6.         sheet.setValue(element[0], element[1], element[2])
  7.     }
  8.     // 在这里把隐藏的单元格样式进行回填
  9.     while (hideCellStyles.length > 0) {
  10.         let element = hideCellStyles.pop();
  11.         let sheet = spread.getActiveSheet();
  12.         sheet.setStyle(element[0], element[1], element[2])
  13.     }
  14. });
复制代码
实现效果
忽略隐藏行.gif102691649.png


完整代码


拖拽复制忽略隐藏行.html

4.78 KB, 下载次数: 10

0 个回复

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