如何使用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
相关产品推荐
相关产品推荐

