在 ExcelJS 中一次删除多个空行
Remove multiple empty rows at once in ExcelJS
我有以下适用于少量行的函数:
async function RemoveEmptyRows() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
var selectedRange = context.workbook.getSelectedRange();
var surroundingRegion = selectedRange.getSurroundingRegion();
var firstCell = selectedRange.getCell(0, 0);
firstCell.load(['columnIndex']);
surroundingRegion.load(['rowCount', 'columnCount']);
await context.sync();
var newRange = sheet.getRangeByIndexes(0, firstCell.columnIndex, surroundingRegion.rowCount, 1);
newRange.load(['address', 'rowCount', 'values']);
await context.sync();
var i = 0;
var loopRange = newRange.rowCount;
var counter = 0;
var cellText = "";
while (i < loopRange) {
cellText = newRange.values[i][0];
if (cellText == "") {
var entireRow = sheet.getRangeByIndexes(i - counter, 0, 1, surroundingRegion.columnCount);
entireRow.delete(Excel.DeleteShiftDirection.up);
counter++;
}
i++;
}
await context.sync();
});
}
此函数的问题在于它会将整行逐行向上移动。
还有另一个函数(从 ScriptLab 修改而来)可以删除重复项,它适用于大量行。
async function RemoveDuplicates() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
var selectedRange = context.workbook.getSelectedRange();
var firstCell = selectedRange.getCell(0, 0);
var surroundingRegion = selectedRange.getSurroundingRegion();
firstCell.load('columnIndex');
surroundingRegion.load('address');
await context.sync();
var columnIndex = firstCell.columnIndex;
const deleteResult = surroundingRegion.removeDuplicates([columnIndex], true);
deleteResult.load();
});
}
有没有办法创建类似于 RemoveDuplicates 函数的东西,但用于 EmptyRows?
谢谢。
目前ExcelJS还没有DeleteEmptyRows()
,不过听起来是个不错的建议,以后会考虑做这个API
可以对范围进行排序吗?如果是,这是一个解决方法。
首先,对范围进行排序,因此空行将保持在一起,然后创建一个包含空行的范围,之后,您可以调用 range.delete(up)
删除空行。
我有以下适用于少量行的函数:
async function RemoveEmptyRows() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
var selectedRange = context.workbook.getSelectedRange();
var surroundingRegion = selectedRange.getSurroundingRegion();
var firstCell = selectedRange.getCell(0, 0);
firstCell.load(['columnIndex']);
surroundingRegion.load(['rowCount', 'columnCount']);
await context.sync();
var newRange = sheet.getRangeByIndexes(0, firstCell.columnIndex, surroundingRegion.rowCount, 1);
newRange.load(['address', 'rowCount', 'values']);
await context.sync();
var i = 0;
var loopRange = newRange.rowCount;
var counter = 0;
var cellText = "";
while (i < loopRange) {
cellText = newRange.values[i][0];
if (cellText == "") {
var entireRow = sheet.getRangeByIndexes(i - counter, 0, 1, surroundingRegion.columnCount);
entireRow.delete(Excel.DeleteShiftDirection.up);
counter++;
}
i++;
}
await context.sync();
});
}
此函数的问题在于它会将整行逐行向上移动。 还有另一个函数(从 ScriptLab 修改而来)可以删除重复项,它适用于大量行。
async function RemoveDuplicates() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
var selectedRange = context.workbook.getSelectedRange();
var firstCell = selectedRange.getCell(0, 0);
var surroundingRegion = selectedRange.getSurroundingRegion();
firstCell.load('columnIndex');
surroundingRegion.load('address');
await context.sync();
var columnIndex = firstCell.columnIndex;
const deleteResult = surroundingRegion.removeDuplicates([columnIndex], true);
deleteResult.load();
});
}
有没有办法创建类似于 RemoveDuplicates 函数的东西,但用于 EmptyRows?
谢谢。
目前ExcelJS还没有DeleteEmptyRows()
,不过听起来是个不错的建议,以后会考虑做这个API
可以对范围进行排序吗?如果是,这是一个解决方法。
首先,对范围进行排序,因此空行将保持在一起,然后创建一个包含空行的范围,之后,您可以调用 range.delete(up)
删除空行。