我使用Apache POI 3.11创建了一个数据透视表.像这样:
FileInputStream file = new FileInputStream(new File(path+fname));
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);
//area of pivot data
AreaReference a=new AreaReference("A1:J4");
CellReference b=new CellReference("N5");
XSSFPivottable pivottable = sheet.createPivottable(a,b);
//insert row
pivottable.addRowLabel(3);
pivottable.addRowLabel(6);
//insert column
pivottable.addColumnLabel(DataConsolidateFunction.COUNT,5);
//export
FileOutputStream output_file =
new FileOutputStream(new File(path+"POI_XLS_Pivot_Example.xlsx"));
workbook.write(output_file);//write excel document to output stream
output_file.close(); //close the file
生成报告后,它会正确显示行.但它没有显示列标签:
我想在我的数据透视表中显示列标签,如下所示:
img http://www.pivot-table.com/wp-content/uploads/2010/12/calculateditem04.png
有谁知道这个问题的解决方案?
谢谢.
解决方法
以下方法(稍微修改过的XSSFPivottable.addRowLabel版本)添加了“普通”透视列标签:
public static void addColLabel(XSSFPivottable pivottable,int columnIndex) {
AreaReference pivotArea = new AreaReference(pivottable.getPivotCacheDeFinition().getCTPivotCacheDeFinition()
.getCacheSource().getWorksheetSource().getRef());
int lastRowIndex = pivotArea.getLastCell().getRow() - pivotArea.getFirstCell().getRow();
int lastColIndex = pivotArea.getLastCell().getCol() - pivotArea.getFirstCell().getCol();
if (columnIndex > lastColIndex) {
throw new indexoutofboundsexception();
}
CTPivotFields pivotFields = pivottable.getCTPivottableDeFinition().getPivotFields();
CTPivotField pivotField = CTPivotField.Factory.newInstance();
CTItems items = pivotField.addNewItems();
pivotField.setAxis(STAxis.AXIS_COL);
pivotField.setShowAll(false);
for (int i = 0; i <= lastRowIndex; i++) {
items.addNewItem().setT(STItemType.DEFAULT);
}
items.setCount(items.sizeOfItemArray());
pivotFields.setPivotFieldArray(columnIndex,pivotField);
CTColFields rowFields;
if (pivottable.getCTPivottableDeFinition().getColFields() != null) {
rowFields = pivottable.getCTPivottableDeFinition().getColFields();
} else {
rowFields = pivottable.getCTPivottableDeFinition().addNewColFields();
}
rowFields.addNewField().setX(columnIndex);
rowFields.setCount(rowFields.sizeOfFieldArray());
}