Bug 61528 - Pivot Table enhancements, new example [Thanks to R Kietel]. This closes #71

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1808946 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
PJ Fanning 2017-09-19 21:21:37 +00:00
parent f13f0dfbbd
commit 37b5ca2c31

View File

@ -0,0 +1,124 @@
/* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==================================================================== */
package org.apache.poi.xssf.usermodel.examples;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Calendar;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataConsolidateFunction;
import org.apache.poi.ss.usermodel.DataFormat;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.AreaReference;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.XSSFPivotTable;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class CreatePivotTable2 {
public static void main(String[] args) throws FileNotFoundException, IOException, InvalidFormatException {
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet();
//Create some data to build the pivot table on
setCellData(sheet);
AreaReference source = new AreaReference("A1:E7", SpreadsheetVersion.EXCEL2007);
CellReference position = new CellReference("H1");
// Create a pivot table on this sheet, with H1 as the top-left cell..
// The pivot table's data source is on the same sheet in A1:E7
XSSFPivotTable pivotTable = sheet.createPivotTable(source, position);
//Configure the pivot table
//Use first column as row label
pivotTable.addRowLabel(0);
//Sum up the second column with column title and data format
pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 1, "Values", "#,##0.00");
//Use third column (month) as columns (side by side)
pivotTable.addColLabel(3, "DD.MM.YYYY");
//Add filter on forth column
pivotTable.addReportFilter(4);
FileOutputStream fileOut = new FileOutputStream("ooxml-pivottable2.xlsx");
wb.write(fileOut);
fileOut.close();
wb.close();
}
public static void setCellData(XSSFSheet sheet){
Calendar cal1 = Calendar.getInstance();
cal1.set(2017, 0, 1, 0, 0, 0);
Calendar cal2 = Calendar.getInstance();
cal2.set(2017, 1, 1, 0, 0, 0);
Row row1 = sheet.createRow(0);
// Create a cell and put a value in it.
// first row are column titles
Cell cell11 = row1.createCell(0);
cell11.setCellValue("Names");
Cell cell12 = row1.createCell(1);
cell12.setCellValue("Values");
Cell cell13 = row1.createCell(2);
cell13.setCellValue("%");
Cell cell14 = row1.createCell(3);
cell14.setCellValue("Month");
Cell cell15 = row1.createCell(4);
cell15.setCellValue("No");
CellStyle csDbl = sheet.getWorkbook().createCellStyle();
DataFormat dfDbl = sheet.getWorkbook().createDataFormat();
csDbl.setDataFormat(dfDbl.getFormat("#,##0.00"));
CellStyle csDt = sheet.getWorkbook().createCellStyle();
DataFormat dfDt = sheet.getWorkbook().createDataFormat();
csDt.setDataFormat(dfDt.getFormat("dd/MM/yyyy"));
// data
setDataRow(sheet, 1, "Jane", 1120.5, 100, cal1.getTime(), 1, csDbl, csDt);
setDataRow(sheet, 2, "Jane", 1453.2, 95, cal2.getTime(), 2, csDbl, csDt);
setDataRow(sheet, 3, "Tarzan", 1869.8, 88, cal1.getTime(), 1, csDbl, csDt);
setDataRow(sheet, 4, "Tarzan", 1536.2, 92, cal2.getTime(), 2, csDbl, csDt);
setDataRow(sheet, 5, "Terk", 1624.1, 75, cal1.getTime(), 1, csDbl, csDt);
setDataRow(sheet, 6, "Terk", 1569.3, 82, cal2.getTime(), 2, csDbl, csDt);
sheet.autoSizeColumn(3);
}
public static void setDataRow(XSSFSheet sheet, int rowNum, String name, double v1, int v2, Date dt, int no, CellStyle csDbl, CellStyle csDt){
Row row = sheet.createRow(rowNum);
// set the values for one row
Cell c1 = row.createCell(0);
c1.setCellValue(name);
Cell c2 = row.createCell(1);
c2.setCellValue(v1);
c2.setCellStyle(csDbl);
Cell c3 = row.createCell(2);
c3.setCellValue(v2);
Cell c4 = row.createCell(3);
c4.setCellValue(dt);
c4.setCellStyle(csDt);
Cell c5 = row.createCell(4);
c5.setCellValue(no);
}
}