aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/java/org/apache/poi/hssf/model/FormulaParser.java15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/java/org/apache/poi/hssf/model/FormulaParser.java b/src/java/org/apache/poi/hssf/model/FormulaParser.java
index 0be6488e68..816b044512 100644
--- a/src/java/org/apache/poi/hssf/model/FormulaParser.java
+++ b/src/java/org/apache/poi/hssf/model/FormulaParser.java
@@ -290,8 +290,19 @@ public class FormulaParser {
if (look == ':') {
Match(':');
String second=GetName();
-
- tokens.add(new Area3DPtg(first+":"+second,externIdx));
+ if (look == '!') {
+ //The sheet name was included in both of the areas. Only really
+ //need it once
+ Match('!');
+ String third=GetName();
+
+ if (!sheetName.equals(second))
+ throw new RuntimeException("Unhandled double sheet reference.");
+
+ tokens.add(new Area3DPtg(first+":"+third,externIdx));
+ } else {
+ tokens.add(new Area3DPtg(first+":"+second,externIdx));
+ }
} else {
tokens.add(new Ref3DPtg(first,externIdx));
}