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

使用Apache POI为数据透视表的Integer列添加筛选(非行/列/值字段)

Apache POI数据透视表Integer类型字段筛选失效问题

在使用Apache POI创建数据透视表时,尝试为未包含在行、列或值区域中的第三列(Integer类型的SNO字段)添加筛选,但Integer类型的筛选无法正常工作,String类型字段的筛选已能正常实现。以下是参考相关帖子编写的Integer值筛选示例代码:

import java.io.FileOutputStream;
import org.apache.poi.ss.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.*;
import org.apache.poi.xssf.usermodel.*;


class PivotIntegerFilter {

public static void main(String[] args) throws Exception {

    try (Workbook workbook = new XSSFWorkbook();
         FileOutputStream fileout = new FileOutputStream("D:\\user\\temp\\pivottable.xlsx")) {

        Sheet pivotSheet = workbook.createSheet("Pivot");
        Sheet dataSheet = workbook.createSheet("Data");

        setCellData(dataSheet, workbook);

        AreaReference areaReference = new AreaReference("A1:E5", SpreadsheetVersion.EXCEL2007);

        XSSFPivotTable pivotTable = ((XSSFSheet) pivotSheet).createPivotTable(areaReference, new CellReference("A4"), dataSheet);

        pivotTable.addReportFilter(1);

        pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 2);
 
        DataFormat dataformat = workbook.createDataFormat();
        short numFmtId = dataformat.getFormat("0");
        pivotTable.getCTPivotTableDefinition().getDataFields().getDataFieldArray(1).setNumFmtId(numFmtId);

        java.util.TreeSet<Integer> uniqueItems = new java.util.TreeSet<Integer>();
        for (int r = areaReference.getFirstCell().getRow() + 1; r < areaReference.getLastCell().getRow() + 1; r++) {
            uniqueItems.add((int) dataSheet.getRow(r).getCell(1).getNumericCellValue());
        }
        int i = 0;

        short numFmtId1 = dataformat.getFormat("0");
        pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(1).setNumFmtId(numFmtId1);
        for (Integer item : uniqueItems) {
            pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(1).getItems().getItemArray(i).unsetT();

            pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(1).getItems().getItemArray(i).setX((long) i);

            int y = item.intValue();
            //CTNumber c = pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields().getCacheFieldArray(1).getSharedItems().addNewN();
            //c.set(XmlObject.Factory.newValue(Integer.toString((int) y)));
            pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields().getCacheFieldArray(1).getSharedItems().addNewS().setV(Integer.toString(y));
            if (!"3".equals(item.toString())) {
                pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(1).getItems().getItemArray(i).setH(true);
            }
            // pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields().getCacheFieldArray(1).setNumFmtId(numFmtId1);
            i++;
        }

        pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(1).setMultipleItemSelectionAllowed(true);
        workbook.write(fileout);
    }
}

static void setCellData(Sheet sheet, Workbook workbook) {
    XSSFRow row;
    XSSFCell cell;
    Object[][] data = new Object[][]{ 
            new Object[]{"PARTY", "SNO", "VOTES", "Total Count", "Total Absent"},
            new Object[]{"REPUBLICAN", 1, 10d, "?", "?"},
            new Object[]{"DEMOCRAT", 3, 5d, "?", "?"},
            new Object[]{"AMERICAN INDEP", 3, 10d, "?", "?"},
            new Object[]{"DECLINED", 2, 10d, "?", "?"}
    };
    for (int r = 0; r < data.length; r++) {
        row = (XSSFRow) sheet.createRow(r);
        Object[] rowData = data[r];
        for (int c = 0; c < rowData.length; c++) {
            cell = row.createCell(c);
            if (rowData[c] instanceof String) {
                cell.setCellValue((String) rowData[c]);
            } else if (rowData[c] instanceof Double) {
                cell.setCellValue((Double) rowData[c]);
            } else if (rowData[c] instanceof Integer) {
                cell.setCellValue((int) rowData[c]);
                DataFormat format = workbook.createDataFormat();
                CellStyle integerCellStyle = workbook.createCellStyle();
                integerCellStyle.setDataFormat(format.getFormat("0"));
                cell.setCellStyle(integerCellStyle);
            }
        }
        }
    }
}

恳请各位提供技术帮助,解决该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:13:20