tipos - Configuración del filtro en los encabezados de una hoja de Excel a través de POI
filtros personalizados en excel (3)
Descubrí cómo hacer esto con NPOI.
Agrega un CT_AutoFilter a la CT_Table.
Estoy adivinando que funciona igual para POI como NPOI.
cttable.autoFilter = new CT_AutoFilter();
cttable.autoFilter.@ref = "A1:C5"; // value is data and includes header.
Genero una hoja, encabezados y columnas de datos bastante bog estándar.
Quiero activar la función "Filtro" para la hoja, para que el usuario pueda ordenar y filtrar fácilmente los datos.
¿Puedo hacer esto usando POI?
Guarde la primera y la última celda del área de filtro y ejecute:
sheet.setAutoFilter(new CellRangeAddress(firstCell.getRow(), lastCell.getRow(), firstCell.getCol(), lastCell.getCol()));
Por ejemplo, de la hoja de abajo.
>x (x, y)
0123456
0|--hhh--| h = header
1|--+++--| + = values
2|--+++--| - = empty fields
3|--+++--|
4|-------|
La primera celda será el encabezado sobre la primera celda +
(2,1). La última será la última celda +
(5,3)
Si también desea establecer un filtro mediante programación, puede utilizar lo siguiente:
void setAutoFilter(final XSSFSheet sheet, final int column, final String value) {
sheet.setAutoFilter(CellRangeAddress.valueOf("A1:Z1"));
final CTAutoFilter sheetFilter = sheet.getCTWorksheet().getAutoFilter();
final CTFilterColumn filterColumn = sheetFilter.addNewFilterColumn();
filterColumn.setColId(column);
final CTFilter filter = filterColumn.addNewFilters().insertNewFilter(0);
filter.setVal(value);
// We have to apply the filter ourselves by hiding the rows:
for (final Row row : sheet) {
for (final Cell c : row) {
if (c.getColumnIndex() == column && !c.getStringCellValue().equals(value)) {
final XSSFRow r1 = (XSSFRow) c.getRow();
if (r1.getRowNum() != 0) { // skip header
r1.getCTRow().setHidden(true);
}
}
}
}
}
Dependencias relevantes de Gradle:
// https://mvnrepository.com/artifact/org.apache.poi/poi
compile group: ''org.apache.poi'', name: ''poi'', version: ''3.9''
// https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
compile group: ''org.apache.poi'', name: ''poi-ooxml'', version: ''3.9''
// https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas
compile group: ''org.apache.poi'', name: ''poi-ooxml-schemas'', version: ''3.9''
// https://mvnrepository.com/artifact/org.apache.poi/ooxml-schemas
compile group: ''org.apache.poi'', name: ''ooxml-schemas'', version: ''1.3''