从数据透视表中读取并写入新页面

时间:2016-11-14 10:13:59

标签: java apache-poi

我正在尝试使用Apache POI创建数据透视表。我的程序从Excel文件中读取并使用输入数据创建数据透视表。但是,在将枢轴写入新工作表时,获得的输出与提供的输入一起。 如何分离枢轴和收到的数据?这是我现在使用的代码。

FileInputStream fis = new FileInputStream(new File("D:\\aaa\\Dump.xlsx"));
XSSFWorkbook workbook = new XSSFWorkbook (fis);
XSSFSheet data = workbook.getSheetAt(0);
XSSFSheet sheet = workbook.createSheet("PIVOT SHEET");
System.out.println(data.getPhysicalNumberOfRows());
System.out.println(data.getRow(0).getLastCellNum());
CellReference cr = new CellReference("A1");
CellReference c1 = new CellReference(0, 0);
CellReference c2 = new CellReference(data.getPhysicalNumberOfRows() - 1,       data.getRow(0).getLastCellNum() - 1);
AreaReference ar = new AreaReference(c1, c2);
XSSFPivotTable pivotTable = sheet.createPivotTable(ar, cr, data);
pivotTable.addRowLabel(7);
pivotTable.addColumnLabel(DataConsolidateFunction.COUNT, 6);

FileOutputStream output_file = new FileOutputStream(new File(" D:\ aaa \ out.xlsx"));    workbook.write(OUTPUT_FILE);      fis.close();

1 个答案:

答案 0 :(得分:0)

    //data sheet
    XSSFSheet data = wb.getSheet("DATA SHEET");
    // sheet you want pivot table in
    XSSFSheet sheet = wb.createSheet("PIVOT SHEET");

    CellReference cr = new CellReference("A1");
    CellReference c1 = new CellReference(0, 0);
    CellReference c2 = new CellReference(data.getPhysicalNumberOfRows() - 1, data.getRow(0).getLastCellNum() - 1);
    //source data
    AreaReference ar = new AreaReference(c1, c2);
    XSSFPivotTable pivotTable = sheet.createPivotTable(ar, cr, data);
    //add row labels and other stuff to pivot table
    pivotTable.addRowLabel(10);
    pivotTable.addRowLabel(11);
    pivotTable.addRowLabel(1);
    pivotTable.addColumnLabel(DataConsolidateFunction.COUNT, 0);

我希望这就是你要找的东西。请告诉我,如果我理解你的问题是错误的

用于添加其他列:

pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(4).setAxis(STAxis.AXIS_COL);
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(4).addNewItems();
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(4).getItems().addNewItem()
        .setT(STItemType.DEFAULT);
pivotTable.getCTPivotTableDefinition().addNewColFields().addNewField().setX(4);

您必须为要添加的每个列执行此操作