Richard.Huang 发表于 2024-1-29 14:06:15

拖拽复制忽略隐藏行

本帖最后由 Richard.Huang 于 2024-1-29 14:08 编辑

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

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


完整代码


页: [1]
查看完整版本: 拖拽复制忽略隐藏行