在线表格编辑器重写右键菜单之 ”删除表列“
本帖最后由 Ellia.Duan 于 2024-7-3 10:18 编辑在Excel中,如何选中的列数刚好等于table的列数,此时右键点击“删除“”表列”可以达到删除整个table的作用,如下图所示:
但是在SpreadJS中,当选中的列数等于tale的列数,此时点击“删除“”表列”,并不会删除整个table,为此我们可以重写下删除表列的相关逻辑
首先,获取到此命令:
let oldDeleteColumnCommand = GC.Spread.Sheets.Commands.tableDeleteColumnsForContextMenu.execute;
然后重写execute
GC.Spread.Sheets.Commands.tableDeleteColumnsForContextMenu.execute = function (spread, options, isUndo) {
var Commands = GC.Spread.Sheets.Commands;
if (isUndo) {
Commands.undoTransaction(spread, options);
return true;
}
let { sheetName } = options;
let sheet = spread.getSheetFromName(sheetName);
let tables = sheet.tables.all();
let tableNames = [];
sheet.getSelections().forEach(function (selection) {
for (let i = 0; i < tables.length; i++) {
let table = tables;
if (table.range().col == selection.col && table.range().colCount == selection.colCount) {
tableNames.push(table.name());
}
}
});
if (tableNames.length) {
Commands.startTransaction(spread, options);
spread.suspendPaint();
if (sheet && tableNames && tableNames.length > 0) {
tableNames.forEach(function (tableName) {
var table = sheet.tables.findByName(tableName);
if (table) {
sheet.tables.remove(table);
}
})
}
spread.resumePaint();
Commands.endTransaction(spread, options);
return true;
} else {
//删除表列
return oldDeleteColumnCommand.apply(this, arguments);
}
}
在上述代码中,我们遍历了整个工作簿的sheet ,然后判断当前选中区域的colCount是不是等于tableRange的colCount 。如果是,则添加进tableNames数组。
最后遍历tableNames数组,试用sheet.tables.remove(table)进行删除table 。
否则,我们按照原来的逻辑,删除表列。
同时,我们要注意,一个sheet中可能有多个table 。所以,在对选择区域遍历的同时,要对tables进行遍历。
页:
[1]