如何条件删除IMPORTHTML导入数据中所有列值为零的行
实现方案
你原公式重复触发了两次IMPORTHTML网页请求,既容易触发网站访问限制,加载速度也慢,下面的优化版公式可以一次性完成数据抓取、*号清洗、全0行过滤的全流程,直接替换原公式即可使用:
=ARRAYFORMULA( LET( raw_data, IFERROR( SUBSTITUTE(IMPORTHTML("https://niftyinvest.com/option-chain/"&D2&"?expiry="&$B$2,"Table",1),"*","")*1, SUBSTITUTE(IMPORTHTML("https://niftyinvest.com/option-chain/"&D2&"?expiry="&$B$2,"Table",1),"*","") ), non_zero_count, MMULT(--(raw_data<>0), SEQUENCE(COLUMNS(raw_data),1,1,0)), FILTER(raw_data, non_zero_count<>0) ) )
逻辑说明
- 用
LET函数将抓取、替换特殊字符、数值转换的处理结果定义为raw_data,全流程仅执行一次网页抓取,避免重复请求 - 全0行判断逻辑:
- 先将
raw_data中所有不等于0的值(包括表头文本、有效数值)标记为1,等于0的值标记为0 - 通过
MMULT矩阵函数按行求和,若某行求和结果为0,代表该行所有列的取值均为0
- 先将
- 最后用
FILTER保留求和结果不为0的行,自动剔除全0无效行
注意事项
期权链表格的表头为文本内容,会被自动识别为非0值,不会被误过滤,不需要额外针对表头做适配。如果使用时出现维度报错,检查抓取到的表格是否存在异常合并单元格即可,niftyinvest的标准期权链页面结构稳定,正常情况直接套用即可运行。
内容的提问来源于stack exchange,提问作者Brijesh
相关产品推荐
相关产品推荐

