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
This commit is contained in:
Dominik Stadler 2013-07-13 05:37:41 +00:00
parent d5528af80c
commit 59455c36a1
3 changed files with 93 additions and 21 deletions

View File

@ -778,6 +778,20 @@ public class SXSSFSheet implements Sheet, Cloneable
* @param toprow the top row to show in desktop window pane * @param toprow the top row to show in desktop window pane
* @param leftcol the left column 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) public void showInPane(short toprow, short leftcol)
{ {
_sh.showInPane(toprow, leftcol); _sh.showInPane(toprow, leftcol);

View File

@ -2386,12 +2386,25 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet {
* @param toprow the top row to show in desktop window pane * @param toprow the top row to show in desktop window pane
* @param leftcol the left column 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); CellReference cellReference = new CellReference(toprow, leftcol);
String cellRef = cellReference.formatAsString(); String cellRef = cellReference.formatAsString();
getPane().setTopLeftCell(cellRef); 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) { public void ungroupColumn(int fromColumn, int toColumn) {
CTCols cols = worksheet.getColsArray(0); CTCols cols = worksheet.getColsArray(0);
for (int index = fromColumn; index <= toColumn; index++) { for (int index = fromColumn; index <= toColumn; index++) {

View File

@ -17,10 +17,6 @@
package org.apache.poi.xssf.usermodel; 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 java.util.List;
import org.apache.poi.hssf.HSSFTestDataSamples; 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.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.HexDump; import org.apache.poi.util.HexDump;
import org.apache.poi.xssf.SXSSFITestDataProvider;
import org.apache.poi.xssf.XSSFITestDataProvider; import org.apache.poi.xssf.XSSFITestDataProvider;
import org.apache.poi.xssf.XSSFTestDataSamples; import org.apache.poi.xssf.XSSFTestDataSamples;
import org.apache.poi.xssf.model.CalculationChain; import org.apache.poi.xssf.model.CalculationChain;
import org.apache.poi.xssf.model.CommentsTable; import org.apache.poi.xssf.model.CommentsTable;
import org.apache.poi.xssf.model.StylesTable; 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.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.helpers.ColumnHelper; import org.apache.poi.xssf.usermodel.helpers.ColumnHelper;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.*; 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 @SuppressWarnings("deprecation") //YK: getXYZArray() array accessors are deprecated in xmlbeans with JDK 1.5 support
public final class TestXSSFSheet extends BaseTestSheet { public final class TestXSSFSheet extends BaseTestSheet {
private static final int ROW_COUNT = 40000;
public TestXSSFSheet() { public TestXSSFSheet() {
super(XSSFITestDataProvider.instance); super(XSSFITestDataProvider.instance);
} }
@ -1079,12 +1079,12 @@ public final class TestXSSFSheet extends BaseTestSheet {
* Test to trigger OOXML-LITE generating to include org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetCalcPr * Test to trigger OOXML-LITE generating to include org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetCalcPr
*/ */
public void testSetForceFormulaRecalculation() { public void testSetForceFormulaRecalculation() {
XSSFWorkbook workbook = new XSSFWorkbook(); XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet 1"); XSSFSheet sheet = workbook.createSheet("Sheet 1");
// Set // Set
sheet.setForceFormulaRecalculation(true); sheet.setForceFormulaRecalculation(true);
assertEquals(true, sheet.getForceFormulaRecalculation()); assertEquals(true, sheet.getForceFormulaRecalculation());
// calcMode="manual" is unset when forceFormulaRecalculation=true // calcMode="manual" is unset when forceFormulaRecalculation=true
CTCalcPr calcPr = workbook.getCTWorkbook().addNewCalcPr(); CTCalcPr calcPr = workbook.getCTWorkbook().addNewCalcPr();
@ -1093,14 +1093,14 @@ public final class TestXSSFSheet extends BaseTestSheet {
assertEquals(STCalcMode.AUTO, calcPr.getCalcMode()); assertEquals(STCalcMode.AUTO, calcPr.getCalcMode());
// Check // Check
sheet.setForceFormulaRecalculation(false); sheet.setForceFormulaRecalculation(false);
assertEquals(false, sheet.getForceFormulaRecalculation()); assertEquals(false, sheet.getForceFormulaRecalculation());
// Save, re-load, and re-check // Save, re-load, and re-check
workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook); workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook);
sheet = workbook.getSheet("Sheet 1"); sheet = workbook.getSheet("Sheet 1");
assertEquals(false, sheet.getForceFormulaRecalculation()); assertEquals(false, sheet.getForceFormulaRecalculation());
} }
public void test54607() { 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());
}
} }