You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java/Groovy基于Apache POI清除Excel已设置的筛选器

可行实现方案(Groovy,兼容Katalon Studio环境)

以下代码基于你当前使用的Apache POI库实现,同时兼容.xls和.xlsx格式,既可以移除筛选器控件,也能恢复所有被筛选隐藏的行,避免后续数据校验漏读:

import org.apache.poi.ss.usermodel.*
import org.apache.poi.ss.util.CellRangeAddress
import org.apache.poi.xssf.usermodel.XSSFSheet
import org.apache.poi.hssf.usermodel.HSSFSheet

// 清除单个Sheet的所有筛选配置
def clearSheetFilter(Sheet sheet) {
    // 移除自动筛选区域定义
    CellRangeAddress filterRange = sheet.getAutoFilterRange()
    if (filterRange != null) {
        sheet.setAutoFilter(null)
    }

    // 恢复所有因筛选被隐藏的行
    int maxRowNum = sheet.getLastRowNum()
    for (int rowIdx = 0; rowIdx <= maxRowNum; rowIdx++) {
        Row row = sheet.getRow(rowIdx)
        if (row != null && row.getZeroHeight()) {
            row.setZeroHeight(false)
        }
    }

    // 清理.xlsx格式残留的筛选配置
    if (sheet instanceof XSSFSheet) {
        def ctSheet = sheet.getCTWorksheet()
        if (ctSheet.isSetAutoFilter()) {
            ctSheet.unsetAutoFilter()
        }
    }

    // 清理.xls格式残留的筛选配置
    if (sheet instanceof HSSFSheet) {
        sheet.getAutoFilter().remove()
    }
}

// 调用示例
def localExcelPath = "替换为你下载的Excel文件本地存储路径"
Workbook workbook = WorkbookFactory.create(new File(localExcelPath))
// 遍历文件中所有Sheet清除筛选
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
    clearSheetFilter(workbook.getSheetAt(i))
}
// 保存修改后的文件
def outStream = new FileOutputStream(localExcelPath)
workbook.write(outStream)
outStream.close()
workbook.close()

注意事项

  • 如果你不需要处理所有Sheet,可以直接指定对应Sheet索引/名称调用clearSheetFilter方法即可
  • 你已经导入的org.apache.poi.ss.usermodel.*和org.apache.poi.ss.util.CellRangeAddress可以直接复用,只有需要处理特定格式残留配置时才需要额外导入XSSF/HSSF相关类
  • Katalon内置的Apache POI版本完全支持以上API,不需要额外依赖

内容的提问来源于stack exchange,提问作者osnineto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:42:02