您好!worksheet.UsedRange.Offset(1, 0)的作用是针对被使用区域的首行偏移了一行,因此它的结果还是包含着被使用区域,之后Deelete()将对偏移后的区域执行删除,这便出现了您所说的“除了第一行 所有的行都删除了”。
以SpreadJS为例,咱们手动筛选得到的筛选结果行可见,而不符合筛选条件的行不可见。因此,可以在筛选后遍历已使用区域检查每行是否可见。
在您的业务场景中,需要删除筛选结果行,那就保存可见行索引,将其保存在ArrayList中。之后,从ArrayList的尾部开始依次向前删除行。
如果从前往后删除,在ArrayList中存储位置靠前者也是索引较小的行,先删除这些行后,后续可见行的索引将实时变更,就与ArrayList中存储的行索引不一致了,最终会导致删除目标出错。 |