48

シート、かなりボグの標準ヘッダーとデータの列を生成します。

シートの「フィルター」機能をオンにして、ユーザーがデータを簡単に並べ替えてフィルターできるようにしたい。

POIを使用してこれを行うことはできますか?

4

5 に答える 5

73

フィルタ領域から最初と最後のセルを保存し、以下を実行します。

sheet.setAutoFilter(new CellRangeAddress(firstCell.getRow(), lastCell.getRow(), firstCell.getCol(), lastCell.getCol()));

たとえば、以下のシートから。

>x         (x, y)
  0123456  
0|--hhh--|   h = header
1|--+++--|   + = values
2|--+++--|   - = empty fields
3|--+++--|
4|-------|

最初のセルは、最初の+(2,1)セルの上のヘッダーになります。最後は最後の+セルになります(5,3)

于 2012-12-04T13:01:38.530 に答える
15

ヘッダーにフィルターを追加する最も簡単な方法:

sheet.setAutoFilter(new CellRangeAddress(0, 0, 0, numColumns));
sheet.createFreezePane(0, 1);
于 2018-12-28T10:45:56.623 に答える
4

プログラムでフィルターを設定する場合は、次を使用できます。

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);
                }
            }
        }
    }
}

関連する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'
于 2017-04-27T13:09:28.527 に答える
1

NPOIでこれを行う方法を見つけました。
CT_AutoFilterをCT_Tableに追加します。

POIでもNPOIと同じように機能すると思います。

    cttable.autoFilter = new CT_AutoFilter();
    cttable.autoFilter.@ref = "A1:C5";   // value is data and includes header.
于 2017-10-26T21:22:04.033 に答える
1

使用するsheet.setAutoFilter(CellRangeAddress.valueOf("B1:H1"));

表形式データのヘッダーセルのみを指定する必要があります。この例では、ヘッダーはセルB1で始まり、セルH1で終わります。
Excelはその下のデータを自動的に検索し、フィルターオプションに表示します。

于 2019-02-25T11:08:41.420 に答える