Author: onealj
Date: Fri May 19 08:26:41 2017
New Revision: 1795595
URL: http://svn.apache.org/viewvc?rev=1795595&view=rev
Log:
github-55: NumberFormatException if XSSFName.setNameName is set with a long
name that looks similar to a cell address. Thanks to Thomas S @Millie4Ever
This closes #55 on github.
https://github.com/apache/poi/pull/55
Modified:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java?rev=1795595&r1=1795594&r2=1795595&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java Fri
May 19 08:26:41 2017
@@ -402,8 +402,14 @@ public final class XSSFName implements N
if (name.matches("[A-Za-z]+\\d+")) {
String col = name.replaceAll("\\d", "");
String row = name.replaceAll("[A-Za-z]", "");
- if (CellReference.cellReferenceIsWithinRange(col, row,
SpreadsheetVersion.EXCEL97)) {
- throw new IllegalArgumentException("Invalid name: '"+name+"':
cannot be $A$1-style cell reference");
+
+ try {
+ if (CellReference.cellReferenceIsWithinRange(col, row,
SpreadsheetVersion.EXCEL2007)) {
+ throw new IllegalArgumentException("Invalid name:
'"+name+"': cannot be $A$1-style cell reference");
+ }
+ } catch (final NumberFormatException e) {
+ // row was not parseable as an Integer, such as a BigInt
+ // therefore name passes the not-a-cell-reference criteria
}
}
Modified:
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java?rev=1795595&r1=1795594&r2=1795595&view=diff
==============================================================================
---
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java
(original)
+++
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java
Fri May 19 08:26:41 2017
@@ -17,14 +17,16 @@
package org.apache.poi.xssf.usermodel;
-import org.apache.poi.xssf.XSSFTestDataSamples;
-import org.junit.Test;
-import org.apache.poi.xssf.XSSFITestDataProvider;
-
import static org.junit.Assert.*;
+import java.io.IOException;
+import java.util.Arrays;
+import org.junit.Test;
+
import org.apache.poi.ss.usermodel.BaseTestNamedRange;
import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.XSSFTestDataSamples;
+import org.apache.poi.xssf.XSSFITestDataProvider;
/**
* @author Yegor Kozlov
@@ -130,4 +132,27 @@ public final class TestXSSFName extends
wb.close();
}
+
+ //github-55
+ @Test
+ public void testSetNameNameCellAddress() throws IOException {
+ XSSFWorkbook wb = new XSSFWorkbook();
+ wb.createSheet("First Sheet");
+ XSSFName name = wb.createName();
+
+ // Cell addresses/references are not allowed
+ for (String ref : Arrays.asList("A1", "$A$1", "A1:B2")) {
+ try {
+ name.setNameName(ref);
+ fail("cell addresses are not allowed: " + ref);
+ } catch (final IllegalArgumentException e) {
+ // expected
+ }
+ }
+
+ // Name that looks similar to a cell reference but is outside the cell
reference row and column limits
+ name.setNameName("A0");
+ name.setNameName("F04030020010");
+ name.setNameName("XFDXFD10");
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]