Java 对齐问题以及数据透视表中总计的格式设置-Apache POI

Java 对齐问题以及数据透视表中总计的格式设置-Apache POI,java,apache-poi,pivot-table,Java,Apache Poi,Pivot Table,我在调整总行时遇到了一个问题,我需要获得下图所示的外观和感觉 我已经尝试了下面的代码,但目前没有得到所需格式的结果 如果可以使用ApachePOI pivot表以所需格式获得结果,请在下面告诉我 下面是我得到输出的图像 我的输出数据透视表结构 需要的格式如下 public class TestPivotTable { public static void main(String[] args) throws Exception { Work

我在调整总行时遇到了一个问题,我需要获得下图所示的外观和感觉

我已经尝试了下面的代码,但目前没有得到所需格式的结果

如果可以使用ApachePOI pivot表以所需格式获得结果,请在下面告诉我

下面是我得到输出的图像

我的输出数据透视表结构

需要的格式如下

     public class TestPivotTable
     {
    public static void main(String[] args) throws Exception
    {
        Workbook wb = new XSSFWorkbook();
        String[][] data = new String[][]{{"AAA","BBB","CCC","DDD","EEE","FFF","GGG","HHH"}, 
     {"TOM","DUMMY","VAL","1001683","Description1","27/04/2017","CAT","7,80,936.58"},
            {"TOM","DUMMY","VAL","1001695","Description2","27/04/2017","CAT","136.28"},
            {"HARRY","DUMMY1","VAL1","1001692","Description3","03/05/2017","CAT1","191468.21"},
            {"HARRY","DUMMY1","VAL1","1001698","Description4","04/05/2017","CAT1","10.11"}};

        XSSFSheet sheet = (XSSFSheet) wb.createSheet("data");
        XSSFSheet pivot = (XSSFSheet) wb.createSheet("summary");
        for(String[] dataRow : data){
            XSSFRow row = sheet.createRow(sheet.getPhysicalNumberOfRows());
            for(String dataCell : dataRow){
                XSSFCell cell = row.createCell(row.getPhysicalNumberOfCells());
                cell.setCellValue(dataCell);
            }
        }
        XSSFTable table = sheet.createTable();    
        CTTable cttable = table.getCTTable();
        table.setDisplayName("table");
        cttable.setRef("A1:D4");
        cttable.setId(1);

        CTTableColumns columns = cttable.addNewTableColumns();
        columns.setCount(3);

        int g = 1;
        for (String colName : data[0]){
            CTTableColumn column = columns.addNewTableColumn();
            column.setId(++g);
            column.setName(colName);      
        }
      AreaReference areaReference = new AreaReference("A1:H"+ (sheet.getLastRowNum() + 
      1),SpreadsheetVersion.EXCEL2007);
      FileOutputStream fileOut=null;
      try {
        XSSFPivotTable pivotTable =  pivot.createPivotTable(areaReference, new CellReference("A1"), 
      sheet);

        pivotTable.getCTPivotTableDefinition().setRowHeaderCaption("AAA");

        List<Integer> iterList = new ArrayList<Integer>();

        iterList.add(0);
        iterList.add(1);
        iterList.add(2);
        iterList.add(3);
        iterList.add(4);
        iterList.add(5);
        iterList.add(6);

        for (Integer j : iterList) {

            pivotTable.addRowLabel(j);
            TreeSet<String> uniqueItems = new java.util.TreeSet<String>();
            for (int r = areaReference.getFirstCell().getRow()+1; r < 
       areaReference.getLastCell().getRow()+1; r++) {
                uniqueItems.add(sheet.getRow(r).getCell(j).toString());
            }
            System.out.println(uniqueItems);
            CTPivotField ctPivotField = 
       pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(j);
            int i = 0;
            for (String item : uniqueItems) {
                ctPivotField.getItems().getItemArray(i).unsetT();
                ctPivotField.getItems().getItemArray(i).setX((long)i);


    pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields().
     getCacheFieldArray(j)
                .getSharedItems().addNewS().setV(item);
                i++;
            }
            ctPivotField.setAutoShow(false);
            ctPivotField.setDefaultSubtotal(false);
            ctPivotField.setCompact(false);
            ctPivotField.setSubtotalTop(true);
            if (ctPivotField.getDefaultSubtotal()) i++; 
            for (int k = ctPivotField.getItems().getItemList().size()-1; k >= i; k--) {
                ctPivotField.getItems().removeItem(k);
            }
            ctPivotField.getItems().setCount(i);

        }

        System.out.println("----end---");

        pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 7, "SUM");

        fileOut = new FileOutputStream("newoutputfile.xlsx");
        wb.write(fileOut);
    }catch(Exception e) {
        System.out.println("Exception While Creating Pivot Table"+e);
    }finally {
        fileOut.close();
        wb.close();
    }

    }
   }

公共类TestPivotTable
{
公共静态void main(字符串[]args)引发异常
{
工作簿wb=新XSSFWorkbook();
字符串[][]数据=新字符串[][{{{“AAA”、“BBB”、“CCC”、“DDD”、“EEE”、“FFF”、“GGG”、“HHH”},
{“汤姆”、“傻瓜”、“瓦尔”、“1001683”、“描述1”、“2017年4月27日”、“猫”、“780936.58”},
{“汤姆”、“傻瓜”、“瓦尔”、“1001695”、“描述2”、“2017年4月27日”、“猫”、“136.28”},
{“哈利”、“傻瓜”、“瓦尔”、“1001692”、“描述3”、“2017年5月3日”、“CAT1”、“191468.21”},
{“哈利”、“傻瓜”、“瓦尔”、“1001698”、“描述4”、“2017年5月4日”、“CAT1”、“10.11”};
XSSFSheet sheet=(XSSFSheet)wb.createSheet(“数据”);
XSSFSheet pivot=(XSSFSheet)wb.createSheet(“摘要”);
for(字符串[]数据行:数据){
XSSFRow row=sheet.createRow(sheet.getPhysicalNumberOfRows());
for(字符串数据单元:dataRow){
XSSFCell cell=row.createCell(row.getPhysicalNumberOfCells());
cell.setCellValue(数据单元);
}
}
XSSFTable table=sheet.createTable();
CTTable=table.getCTTable();
table.setDisplayName(“table”);
cttable.setRef(“A1:D4”);
cttable.setId(1);
CTTableColumns=cttable.addNewTableColumns();
列。设置计数(3);
int g=1;
for(字符串colName:data[0]){
CTTableColumn=columns.addNewTableColumn();
column.setId(++g);
column.setName(colName);
}
AreaReference AreaReference=新的AreaReference(“A1:H”+(sheet.getLastRowNum()+
1) ,电子表格版本,EXCEL2007);
FileOutputStream fileOut=null;
试一试{
XSSFPivotTable pivotTable=pivot.createPivotTable(区域引用,新单元格引用(“A1”),
板材);
数据透视表.getCTPivotTableDefinition().setRowHeaderCaption(“AAA”);
List iterList=new ArrayList();
iterList.add(0);
iterList.add(1);
增加(2);
增加(3);
增加(4);
增加(5);
增加(6);
for(整数j:iterList){
数据透视表.addRowLabel(j);
TreeSet uniqueItems=new java.util.TreeSet();
对于(int r=areaReference.getFirstCell().getRow()+1;r<
areaReference.getLastCell().getRow()+1;r++){
add(sheet.getRow(r.getCell(j.toString());
}
系统输出打印项次(唯一项);
CTPivotField CTPivotField=
数据透视表.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(j);
int i=0;
用于(字符串项:唯一项){
ctPivotField.getItems().getItemArray(i).unset();
ctPivotField.getItems().getItemArray(i).setX((长)i);
数据透视表.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields()。
getCacheFieldArray(j)
.getSharedItems().addNewS().setV(项目);
i++;
}
ctPivotField.setAutoShow(false);
ctPivotField.setDefaultSubtotal(false);
ctPivotField.setCompact(false);
ctPivotField.setSubtotalTop(真);
if(ctPivotField.getDefaultSubtotal())i++;
对于(int k=ctPivotField.getItems().getItemList().size()-1;k>=i;k--){
ctPivotField.getItems().removeItem(k);
}
ctPivotField.getItems().setCount(i);
}
System.out.println(“----结束----”;
数据透视表.addColumnLabel(DataConsolidateFunction.SUM,7,“SUM”);
fileOut=newfileoutputstream(“newoutputfile.xlsx”);
wb.写入(文件输出);
}捕获(例外e){
System.out.println(“创建透视表时出现异常”+e);
}最后{
fileOut.close();
wb.close();
}
}
}

将有助于向我们展示您得到了什么。此外,我没有看到任何地方可以设置任何
单元格样式
/
数据格式
嗨,实际上我正在使用树形结构。你能显示列出
过滤器
列的窗口吗,excel中的
,这样我们就知道哪个字段在哪里了?我只是把我得到的输出放在这里。我是这个透视表的新手,因此无法获得上面所列格式的输出。嗨,XtremeBaumer,添加了透视表过滤器、列、行和值结构,这将有助于向我们展示您得到的结果。此外,我没有看到任何地方可以设置任何
单元格样式
/
数据格式
嗨,实际上我正在使用树形结构。你能显示列出
过滤器
列的窗口吗,excel中的
,这样我们就知道哪个字段在哪里了?我只是把我得到的输出放在这里。我是这个透视表的新手,因此无法获得上述格式的输出。嗨,XtremeBaumer,添加了透视表过滤器、列、行和值结构