]> source.dussan.org Git - poi.git/commitdiff
Bug 55248: Add methods for showInPane() using int and unit test to verify it can...
authorDominik Stadler <centic@apache.org>
Sat, 13 Jul 2013 05:37:41 +0000 (05:37 +0000)
committerDominik Stadler <centic@apache.org>
Sat, 13 Jul 2013 05:37:41 +0000 (05:37 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1502749 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java

index 401f339de01f7c27b27eca912abe20479f140352..b92adddc745d199e994de6a91e9588242e7b7413 100644 (file)
@@ -778,6 +778,20 @@ public class SXSSFSheet implements Sheet, Cloneable
      * @param toprow the top row to show in desktop window pane
      * @param leftcol the left column to show in desktop window pane
      */
+    public void showInPane(int toprow, int leftcol)
+    {
+        _sh.showInPane(toprow, leftcol);
+    }
+
+    /**
+     * Sets desktop window pane display area, when the
+     * file is first opened in a viewer.
+     *
+     * @param toprow the top row to show in desktop window pane
+     * @param leftcol the left column to show in desktop window pane
+     * 
+     * @deprecated Use the version of showInPane() with ints as there can be more than 32767 rows. 
+     */
     public void showInPane(short toprow, short leftcol)
     {
         _sh.showInPane(toprow, leftcol);
index 58b4aebd9e73934484b0615e83de47a86012dc97..439c269a39ace8e31f95d43dc58da61d62d5fba6 100644 (file)
@@ -2386,12 +2386,25 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
      * @param toprow the top row to show in desktop window pane
      * @param leftcol the left column to show in desktop window pane
      */
-    public void showInPane(short toprow, short leftcol) {
+    public void showInPane(int toprow, int leftcol) {
         CellReference cellReference = new CellReference(toprow, leftcol);
         String cellRef = cellReference.formatAsString();
         getPane().setTopLeftCell(cellRef);
     }
 
+    /**
+     * Location of the top left visible cell Location of the top left visible cell in the bottom right
+     * pane (when in Left-to-Right mode).
+     *
+     * @param toprow the top row to show in desktop window pane
+     * @param leftcol the left column to show in desktop window pane
+     * 
+     * @deprecated Use the version of showInPane() with ints as there can be more than 32767 rows. 
+     */
+    public void showInPane(short toprow, short leftcol) {
+        showInPane((int)toprow, (int)leftcol);
+    }
+
     public void ungroupColumn(int fromColumn, int toColumn) {
         CTCols cols = worksheet.getColsArray(0);
         for (int index = fromColumn; index <= toColumn; index++) {
index 8c96fb817ae6258f3b9bab0b43e53579f4e5cb19..9f1cb922f3c99771e68a3d0a5c504d9babc309c9 100644 (file)
 
 package org.apache.poi.xssf.usermodel;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.List;
 
 import org.apache.poi.hssf.HSSFTestDataSamples;
@@ -33,11 +29,13 @@ import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.util.HexDump;
+import org.apache.poi.xssf.SXSSFITestDataProvider;
 import org.apache.poi.xssf.XSSFITestDataProvider;
 import org.apache.poi.xssf.XSSFTestDataSamples;
 import org.apache.poi.xssf.model.CalculationChain;
 import org.apache.poi.xssf.model.CommentsTable;
 import org.apache.poi.xssf.model.StylesTable;
+import org.apache.poi.xssf.streaming.SXSSFSheet;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.apache.poi.xssf.usermodel.helpers.ColumnHelper;
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
@@ -46,6 +44,8 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
 @SuppressWarnings("deprecation") //YK: getXYZArray() array accessors are deprecated in xmlbeans with JDK 1.5 support
 public final class TestXSSFSheet extends BaseTestSheet {
 
+    private static final int ROW_COUNT = 40000;
+
     public TestXSSFSheet() {
         super(XSSFITestDataProvider.instance);
     }
@@ -1079,28 +1079,28 @@ public final class TestXSSFSheet extends BaseTestSheet {
      * Test to trigger OOXML-LITE generating to include org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetCalcPr
      */
     public void testSetForceFormulaRecalculation() {
-          XSSFWorkbook workbook = new XSSFWorkbook();
-         XSSFSheet sheet = workbook.createSheet("Sheet 1");
-
-         // Set
-         sheet.setForceFormulaRecalculation(true);
-         assertEquals(true, sheet.getForceFormulaRecalculation());
-
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        XSSFSheet sheet = workbook.createSheet("Sheet 1");
+        
+        // Set
+        sheet.setForceFormulaRecalculation(true);
+        assertEquals(true, sheet.getForceFormulaRecalculation());
+        
         // calcMode="manual" is unset when forceFormulaRecalculation=true
         CTCalcPr calcPr = workbook.getCTWorkbook().addNewCalcPr();
         calcPr.setCalcMode(STCalcMode.MANUAL);
         sheet.setForceFormulaRecalculation(true);
         assertEquals(STCalcMode.AUTO, calcPr.getCalcMode());
-
+        
         // Check
-         sheet.setForceFormulaRecalculation(false);
-         assertEquals(false, sheet.getForceFormulaRecalculation());
-
-
-         // Save, re-load, and re-check
-         workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook);
-         sheet = workbook.getSheet("Sheet 1");
-         assertEquals(false, sheet.getForceFormulaRecalculation());
+        sheet.setForceFormulaRecalculation(false);
+        assertEquals(false, sheet.getForceFormulaRecalculation());
+        
+        
+        // Save, re-load, and re-check
+        workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook);
+        sheet = workbook.getSheet("Sheet 1");
+        assertEquals(false, sheet.getForceFormulaRecalculation());
        }
 
     public void test54607() {
@@ -1164,4 +1164,49 @@ public final class TestXSSFSheet extends BaseTestSheet {
                }
        }
        }
+       
+       public void testShowInPaneManyRowsBug55248() {
+           XSSFWorkbook workbook = new XSSFWorkbook();
+           XSSFSheet sheet = workbook.createSheet("Sheet 1");
+
+           sheet.showInPane(0, 0);
+           
+        for(int i = ROW_COUNT/2;i < ROW_COUNT;i++) {
+            sheet.createRow(i);
+            sheet.showInPane(i, 0);
+            // this one fails: sheet.showInPane((short)i, 0);
+        }
+        
+        short i = 0;
+        sheet.showInPane(i, i);
+        
+        XSSFWorkbook wb = XSSFTestDataSamples.writeOutAndReadBack(workbook);
+        checkRowCount(wb);
+       }
+
+    public void testShowInPaneManyRowsBug55248SXSSF() {
+        SXSSFWorkbook workbook = new SXSSFWorkbook(new XSSFWorkbook());
+        SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet("Sheet 1");
+        
+        sheet.showInPane(0, 0);
+        
+        for(int i = ROW_COUNT/2;i < ROW_COUNT;i++) {
+            sheet.createRow(i);
+            sheet.showInPane(i, 0);
+            // this one fails: sheet.showInPane((short)i, 0);
+        }
+        
+        short i = 0;
+        sheet.showInPane(i, i);
+        
+        Workbook wb = SXSSFITestDataProvider.instance.writeOutAndReadBack(workbook);
+        checkRowCount(wb);
+    }
+
+    private void checkRowCount(Workbook wb) {
+        assertNotNull(wb);
+        final Sheet sh = wb.getSheet("Sheet 1");
+        assertNotNull(sh);
+        assertEquals(ROW_COUNT-1, sh.getLastRowNum());
+    }
 }