summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2013-07-13 05:37:41 +0000
committerDominik Stadler <centic@apache.org>2013-07-13 05:37:41 +0000
commit11ceaebac6cf26257f95171ebba45bac7f888eb4 (patch)
tree512b4c54de24d6d7c9bff4dfe9689f558d28056f /src
parent97d6444cb0169c6f563f00d1929f8eb0f2c43f5d (diff)
downloadpoi-11ceaebac6cf26257f95171ebba45bac7f888eb4.tar.gz
poi-11ceaebac6cf26257f95171ebba45bac7f888eb4.zip
Bug 55248: Add methods for showInPane() using int and unit test to verify it can handle more than 32767 rows
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1502749 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java14
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java15
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java85
3 files changed, 93 insertions, 21 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
index 401f339de0..b92adddc74 100644
--- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
+++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
@@ -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);
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
index 58b4aebd9e..439c269a39 100644
--- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
+++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
@@ -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++) {
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
index 8c96fb817a..9f1cb922f3 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
@@ -17,10 +17,6 @@
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());
+ }
}