简单来说就是初步筛选掉不符合的数据,更进一步缩小遍历范围。 试了好几天晕了没头绪了。
是希望对筛选区域做处理吗?
筛选数据之后, 可以直接对整个 UsedRange 做处理, 隐藏的数据不会受影响的
不行,用筛选语句以后,activesheets.usedrange获取到的依旧不是筛选后的区域,而是整表。
可以通过这种方式获取筛选后的区域
const visibleRange = Range("A2:B10").SpecialCells(xlCellTypeVisible)
visibleRange.Each((r) => {
r.Value = "100"
})
那么我如果要获取整表的筛选区域的范围怎么写?我想要如下面的示例获取一个具体的范围数值。
// 定义使用区域 var UsedRange = API.ActiveSheet.UsedRange;
var firstCol = UsedRange.Column;
var lastCol = UsedRange.ColumnEnd;
var firstRow = UsedRange.Row;
var lastRow = UsedRange.RowEnd;
// 打印激活区域的范围
console.log(
'[' + 'firstCol: ' + firstCol + ']',
'[' + 'lastCol: ' + lastCol + ']',
'[' + 'firstRow: ' + firstRow + ']',
'[' + 'lastRow: ' + lastRow + ']'
)
这里有一个打印筛选出来的行的代码示例。如果足需求望采纳。
const userRange = Application.ActiveSheet.UsedRange
const rangeInfo = `${Application.Base10To26(userRange.Column)}${userRange.Row}:${Application.Base10To26(userRange.ColumnEnd)}${userRange.RowEnd}`
const visibleRange = Range(rangeInfo).SpecialCells(xlCellTypeVisible)
const rows = []
let lastRowIndex = 0
visibleRange.Each((r) => {
if (lastRowIndex != r.Row) {
rows.push(r.Row)
}
lastRowIndex = r.Row
})
console.error(rows)