如何在使用ApachePOI、java在工作表中插入轴后获取行号

如何在使用ApachePOI、java在工作表中插入轴后获取行号,java,apache-poi,Java,Apache Poi,我正在做一个项目,我必须在一张图纸中创建多个枢轴。每当我尝试使用sheet.getLastRowNum()获取最后一行时,创建一个轴之后,它总是返回0。由于这个原因,我不能在一张图纸中创建多个轴,因为它与其他轴重叠。我的代码是 String[] filter= null; if(!filters.isEmpty()){ filter = filters.split(","); } String[] column = columns.split(","); String[] row = r

我正在做一个项目,我必须在一张图纸中创建多个枢轴。每当我尝试使用sheet.getLastRowNum()获取最后一行时,创建一个轴之后,它总是返回0。由于这个原因,我不能在一张图纸中创建多个轴,因为它与其他轴重叠。我的代码是

String[] filter= null;
if(!filters.isEmpty()){
    filter = filters.split(",");
}
String[] column = columns.split(",");
String[] row = rows.split(",");
String[] value = values.split(",");
XSSFWorkbook workbook = (XSSFWorkbook) workbookObj;
XSSFSheet sheet = workbook.getSheetAt(0);
int firstRow = sheet.getFirstRowNum();
int lastRow = sheet.getLastRowNum();
int firstCol = sheet.getRow(0).getFirstCellNum();
int lastCol = sheet.getRow(0).getLastCellNum();
CellReference topLeft = new CellReference("Employee Details",firstRow, firstCol, false, false);
CellReference botRight = new CellReference("Employee Details",lastRow, lastCol - 1, false, false);
AreaReference aref = new AreaReference(topLeft,botRight);
XSSFSheet sheet1 = workbook.getSheet(sheetName);
int pivotlastRow = sheet1.getLastRowNum();   //always returning 0
CellReference pos = new CellReference(pivotlastRow + 4, 0);
XSSFPivotTable pivotTable = sheet1.createPivotTable(aref,pos);
if(filter!=null){
    for(int i=0;i<filter.length;i++){
        pivotTable.addReportFilter(Integer.parseInt(filter[i]));
    }
}
for(int j=0;j<column.length;j++){
  addColLabel(pivotTable,Integer.parseInt(column[j]));
}
for(int k=0;k<row.length;k++){
   pivotTable.addRowLabel(Integer.parseInt(row[k]));
}
pivotTable.addColumnLabel(DataConsolidateFunction.COUNT, Integer.parseInt(values));
String[]过滤器=null;
如果(!filters.isEmpty()){
filter=filters.split(“,”);
}
String[]column=columns.split(“,”);
字符串[]行=行。拆分(“”,“”);
字符串[]值=值。拆分(“”,“”);
XSSF工作簿=(XSSF工作簿)工作簿对象;
XSSFSheet sheet=workbook.getSheetAt(0);
int firstRow=sheet.getFirstRowNum();
int lastRow=sheet.getLastRowNum();
int firstCol=sheet.getRow(0.getFirstCellNum();
int lastCol=sheet.getRow(0.getLastCellNum();
CellReference topLeft=新的CellReference(“员工详细信息”,第一行,第一列,false,false);
CellReference botRight=新的CellReference(“员工详细信息”,lastRow,lastCol-1,false,false);
AreaReference aref=新的AreaReference(左上、右下);
XSSFSheet sheet1=workbook.getSheet(sheetName);
int pivotlastRow=sheet1.getLastRowNum()//始终返回0
CellReference pos=新的CellReference(pivotlastRow+4,0);
XSSFPivotTable数据透视表=表1.创建数据透视表(aref,pos);
if(过滤器!=null){

对于(int i=0;我不会在一个Excel工作表中创建多个透视表。这不仅很难创建,而且在Excel中也很难使用。使用
apache poi
无法创建,因为
apache poi
不渲染透视表,而是在打开时将此渲染委托给Excel应用程序工作簿。因此,
apache poi
无法知道透视表将占用多少单元格。感谢您@Axel Richter的宝贵输入。我只是好奇,在从Xssfworkbook对象创建透视后,是否有任何方法可以获取最后一行。提前感谢。不,正如前面所说,已经没有任何方法可以获取透视选项卡下的最后一行在使用
apache poi
XSSF
创建透视后,必须在Excel中打开工作簿,以便呈现透视表。然后必须在Excel中保存工作簿。然后必须从新保存的文件重新创建
XSSFWorkbook
。然后透视表中的最后一行将是最后一个r渲染数据透视表的视图。