From af7675cf103d9cfe1f1bc41faa97612aa2dc21d5 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Thu, 19 May 2016 20:18:08 +0000 Subject: [PATCH] Apply patch for bug 59355: XSSFPivotTable::addColumnLabel sets the cell type of a cell outside of the source data area git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1744635 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xssf/usermodel/XSSFPivotTable.java | 9 ++-- .../xssf/usermodel/TestXSSFPivotTable.java | 52 +++++++++++++++++++ 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPivotTable.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPivotTable.java index ef6eb35a56..d0e9d1a8ce 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPivotTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPivotTable.java @@ -334,9 +334,9 @@ public class XSSFPivotTable extends POIXMLDocumentPart { /** * Add data field with data from the given column and specified function. * @param function the function to be used on the data - * @param index the index of the column to be used as column label. - * The following functions exists: - * Sum, Count, Average, Max, Min, Product, Count numbers, StdDev, StdDevp, Var, Varp + * The following functions exists: + * Sum, Count, Average, Max, Min, Product, Count numbers, StdDev, StdDevp, Var, Varp + * @param columnIndex the index of the column to be used as column label. * @param valueFieldName the name of pivot table value field */ @Beta @@ -355,7 +355,8 @@ public class XSSFPivotTable extends POIXMLDocumentPart { } CTDataField dataField = dataFields.addNewDataField(); dataField.setSubtotal(STDataConsolidateFunction.Enum.forInt(function.getValue())); - Cell cell = getDataSheet().getRow(pivotArea.getFirstCell().getRow()).getCell(columnIndex); + Cell cell = getDataSheet().getRow(pivotArea.getFirstCell().getRow()) + .getCell(pivotArea.getFirstCell().getCol() + columnIndex); cell.setCellType(Cell.CELL_TYPE_STRING); dataField.setName(valueFieldName); dataField.setFld(columnIndex); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPivotTable.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPivotTable.java index 861984fd57..9f90202e0f 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPivotTable.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPivotTable.java @@ -32,6 +32,8 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataConsolidateFunc public class TestXSSFPivotTable extends TestCase { private XSSFPivotTable pivotTable; + private XSSFPivotTable offsetPivotTable; + private Cell offsetOuterCell; @Override public void setUp(){ @@ -71,6 +73,45 @@ public class TestXSSFPivotTable extends TestCase { AreaReference source = new AreaReference("A1:C2"); pivotTable = sheet.createPivotTable(source, new CellReference("H5")); + + XSSFSheet offsetSheet = (XSSFSheet) wb.createSheet(); + + Row tableRow_1 = offsetSheet.createRow(1); + offsetOuterCell = tableRow_1.createCell(1); + offsetOuterCell.setCellValue(-1); + Cell tableCell_1_1 = tableRow_1.createCell(2); + tableCell_1_1.setCellValue("Row #"); + Cell tableCell_1_2 = tableRow_1.createCell(3); + tableCell_1_2.setCellValue("Exponent"); + Cell tableCell_1_3 = tableRow_1.createCell(4); + tableCell_1_3.setCellValue("10^Exponent"); + + Row tableRow_2 = offsetSheet.createRow(2); + Cell tableCell_2_1 = tableRow_2.createCell(2); + tableCell_2_1.setCellValue(0); + Cell tableCell_2_2 = tableRow_2.createCell(3); + tableCell_2_2.setCellValue(0); + Cell tableCell_2_3 = tableRow_2.createCell(4); + tableCell_2_3.setCellValue(1); + + Row tableRow_3= offsetSheet.createRow(3); + Cell tableCell_3_1 = tableRow_3.createCell(2); + tableCell_3_1.setCellValue(1); + Cell tableCell_3_2 = tableRow_3.createCell(3); + tableCell_3_2.setCellValue(1); + Cell tableCell_3_3 = tableRow_3.createCell(4); + tableCell_3_3.setCellValue(10); + + Row tableRow_4 = offsetSheet.createRow(4); + Cell tableCell_4_1 = tableRow_4.createCell(2); + tableCell_4_1.setCellValue(2); + Cell tableCell_4_2 = tableRow_4.createCell(3); + tableCell_4_2.setCellValue(2); + Cell tableCell_4_3 = tableRow_4.createCell(4); + tableCell_4_3.setCellValue(100); + + AreaReference offsetSource = new AreaReference(new CellReference("C2"), new CellReference("E4")); + offsetPivotTable = offsetSheet.createPivotTable(offsetSource, new CellReference("C6")); } /** @@ -268,4 +309,15 @@ public class TestXSSFPivotTable extends TestCase { } fail(); } + + /** + * Verify that the Pivot Table operates only within the referenced area, even when the + * first column of the referenced area is not index 0. + */ + public void testAddDataColumnWithOffsetData() { + offsetPivotTable.addColumnLabel(DataConsolidateFunction.SUM, 1); + assertEquals(Cell.CELL_TYPE_NUMERIC, offsetOuterCell.getCellType()); + + offsetPivotTable.addColumnLabel(DataConsolidateFunction.SUM, 0); + } } -- 2.39.5