Fixed XSSFCell to correctly parse column indexes greater than 702 (ZZ), see Bugzilla #47606

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@801305 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Yegor Kozlov 2009-08-05 17:02:04 +00:00
parent 91b9065ff6
commit 30ac3a9d07
3 changed files with 15 additions and 18 deletions

View File

@ -33,6 +33,7 @@
<changes> <changes>
<release version="3.5-beta7" date="2009-??-??"> <release version="3.5-beta7" date="2009-??-??">
<action dev="POI-DEVELOPERS" type="fix">47606 - Fixed XSSFCell to correctly parse column indexes greater than 702 (ZZ)</action>
<action dev="POI-DEVELOPERS" type="fix">47598 - Improved formula evaluator number comparison</action> <action dev="POI-DEVELOPERS" type="fix">47598 - Improved formula evaluator number comparison</action>
<action dev="POI-DEVELOPERS" type="fix">47571 - Fixed XWPFWordExtractor to extract inserted/deleted text</action> <action dev="POI-DEVELOPERS" type="fix">47571 - Fixed XWPFWordExtractor to extract inserted/deleted text</action>
<action dev="POI-DEVELOPERS" type="fix">47548 - Fixed RecordFactoryInputStream to properly read continued DrawingRecords</action> <action dev="POI-DEVELOPERS" type="fix">47548 - Fixed RecordFactoryInputStream to properly read continued DrawingRecords</action>

View File

@ -97,7 +97,7 @@ public final class XSSFCell implements Cell {
this.cell = cell; this.cell = cell;
this.row = row; this.row = row;
if (cell.getR() != null) { if (cell.getR() != null) {
this.cellNum = parseCellNum(cell.getR()); this.cellNum = new CellReference(cell.getR()).getCol();
} }
this.sharedStringSource = row.getSheet().getWorkbook().getSharedStringSource(); this.sharedStringSource = row.getSheet().getWorkbook().getSharedStringSource();
this.stylesSource = row.getSheet().getWorkbook().getStylesSource(); this.stylesSource = row.getSheet().getWorkbook().getStylesSource();
@ -647,21 +647,6 @@ public final class XSSFCell implements Cell {
cell.setR(ref); cell.setR(ref);
} }
/**
* Converts A1 style reference into 0-based column index
*
* @param r an A1 style reference to the location of this cell
* @return 0-based column index
*/
protected static short parseCellNum(String r) {
r = r.split("\\d+")[0];
if (r.length() == 1) {
return (short) (r.charAt(0) - 'A');
} else {
return (short) (r.charAt(1) - 'A' + 26 * (r.charAt(0) - '@'));
}
}
/** /**
* Set the cells type (numeric, formula or string) * Set the cells type (numeric, formula or string)
* *

View File

@ -160,8 +160,6 @@ public abstract class BaseTestRow extends TestCase {
assertTrue(e.getMessage().startsWith("Invalid column index (-1)")); assertTrue(e.getMessage().startsWith("Invalid column index (-1)"));
} }
row.createCell(maxCellNum);
//Test high cell bound //Test high cell bound
try { try {
Cell cell = row.createCell(maxCellNum + 1); Cell cell = row.createCell(maxCellNum + 1);
@ -170,6 +168,19 @@ public abstract class BaseTestRow extends TestCase {
// expected during successful test // expected during successful test
assertTrue(e.getMessage().startsWith("Invalid column index ("+(maxCellNum+1)+")")); assertTrue(e.getMessage().startsWith("Invalid column index ("+(maxCellNum+1)+")"));
} }
for(int i=0; i < maxCellNum; i++){
Cell cell = row.createCell(i);
}
assertEquals(maxCellNum, row.getPhysicalNumberOfCells());
workbook = getTestDataProvider().writeOutAndReadBack(workbook);
sheet = workbook.getSheetAt(0);
row = sheet.getRow(0);
assertEquals(maxCellNum, row.getPhysicalNumberOfCells());
for(int i=0; i < maxCellNum; i++){
Cell cell = row.getCell(i);
assertEquals(i, cell.getColumnIndex());
}
} }
/** /**