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 97d6444cb0
commit 11ceaebac6
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 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);

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 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++) {

View File

@ -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);
}
@ -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());
}
}