]> source.dussan.org Git - poi.git/commitdiff
Apply patch for bug 59355: XSSFPivotTable::addColumnLabel sets the cell type of a...
authorDominik Stadler <centic@apache.org>
Thu, 19 May 2016 20:18:08 +0000 (20:18 +0000)
committerDominik Stadler <centic@apache.org>
Thu, 19 May 2016 20:18:08 +0000 (20:18 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1744635 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPivotTable.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFPivotTable.java

index ef6eb35a561d2f9a804605eabae6bf5584e0aaed..d0e9d1a8ce62706efd31145656eb8a09d8c4a115 100644 (file)
@@ -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);
index 861984fd57e63094886007b10c189eb3334acb1a..9f90202e0fb1f6e17522b5b7eca4e6c8feb7e06c 100644 (file)
@@ -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);
+    }
 }