拖拽复制忽略隐藏行
本帖最后由 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]