我正在尝试使用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();
答案 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);
您必须为要添加的每个列执行此操作