本帖最后由 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 = [i, j, sheet.getValue(i, j)]
- let cellStyles = [i, j, sheet.getStyle(i, j)]
- 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[0], element[1], element[2])
- }
- // 在这里把隐藏的单元格样式进行回填
- while (hideCellStyles.length > 0) {
- let element = hideCellStyles.pop();
- let sheet = spread.getActiveSheet();
- sheet.setStyle(element[0], element[1], element[2])
- }
- });
复制代码 实现效果
完整代码
|
|