From df16f03172c33968ef96d2d6f484ace61460719a Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Wed, 5 Aug 2009 17:02:04 +0000 Subject: [PATCH] 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 --- src/documentation/content/xdocs/status.xml | 1 + .../org/apache/poi/xssf/usermodel/XSSFCell.java | 17 +---------------- .../apache/poi/ss/usermodel/BaseTestRow.java | 15 +++++++++++++-- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index af9bb5a6b3..af0d90c143 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -33,6 +33,7 @@ + 47606 - Fixed XSSFCell to correctly parse column indexes greater than 702 (ZZ) 47598 - Improved formula evaluator number comparison 47571 - Fixed XWPFWordExtractor to extract inserted/deleted text 47548 - Fixed RecordFactoryInputStream to properly read continued DrawingRecords diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java index e817553a4c..f6615b73e8 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java @@ -97,7 +97,7 @@ public final class XSSFCell implements Cell { this.cell = cell; this.row = row; if (cell.getR() != null) { - this.cellNum = parseCellNum(cell.getR()); + this.cellNum = new CellReference(cell.getR()).getCol(); } this.sharedStringSource = row.getSheet().getWorkbook().getSharedStringSource(); this.stylesSource = row.getSheet().getWorkbook().getStylesSource(); @@ -647,21 +647,6 @@ public final class XSSFCell implements Cell { 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) * diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java index 3c162d7762..8124ede7bf 100755 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java @@ -160,8 +160,6 @@ public abstract class BaseTestRow extends TestCase { assertTrue(e.getMessage().startsWith("Invalid column index (-1)")); } - row.createCell(maxCellNum); - //Test high cell bound try { Cell cell = row.createCell(maxCellNum + 1); @@ -170,6 +168,19 @@ public abstract class BaseTestRow extends TestCase { // expected during successful test 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()); + } + } /** -- 2.39.5