找回密码
 立即注册

QQ登录

只需一步,快速开始

瑞雪
初级会员   /  发表于:2024-12-22 15:20  /   查看:31  /  回复:3
2金币

已经筛选出第一列的所有空白行:如下
workSheet.Range("A:A").AutoFilter(0,"=");

怎么将筛选出来的所有空白行删除?



我有个方法:如下
将筛选出来的所有行(除去第一行)删除,但是结果是除了第一行 所有的行都删除了
workSheet.UsedRange.Offset(1,0).EntireRow.Delete();

3 个回复

倒序浏览
Wilson.Zhang
超级版主   /  发表于:12 小时前
沙发
您好!worksheet.UsedRange.Offset(1, 0)的作用是针对被使用区域的首行偏移了一行,因此它的结果还是包含着被使用区域,之后Deelete()将对偏移后的区域执行删除,这便出现了您所说的“除了第一行 所有的行都删除了”。

以SpreadJS为例,咱们手动筛选得到的筛选结果行可见,而不符合筛选条件的行不可见。因此,可以在筛选后遍历已使用区域检查每行是否可见。
在您的业务场景中,需要删除筛选结果行,那就保存可见行索引,将其保存在ArrayList中。之后,从ArrayList的尾部开始依次向前删除行。

如果从前往后删除,在ArrayList中存储位置靠前者也是索引较小的行,先删除这些行后,后续可见行的索引将实时变更,就与ArrayList中存储的行索引不一致了,最终会导致删除目标出错。
回复 使用道具 举报
WhiteSong
注册会员   /  发表于:10 小时前
板凳
auto filter只是隐藏了有值的单元格,你取used range做删除肯定把所有的都删了,可以取used range然后遍历,如果当前行是隐藏的,调用delete。

评分

参与人数 1金币 +300 收起 理由
Wilson.Zhang + 300

查看全部评分

回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:9 小时前
地板
WhiteSong 发表于 2024-12-23 12:30
auto filter只是隐藏了有值的单元格,你取used range做删除肯定把所有的都删了,可以取used range然后遍历 ...

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部