]> source.dussan.org Git - poi.git/commitdiff
Use the link table when looking up external xssf names
authorNick Burch <nick@apache.org>
Mon, 21 Jul 2014 16:52:19 +0000 (16:52 +0000)
committerNick Burch <nick@apache.org>
Mon, 21 Jul 2014 16:52:19 +0000 (16:52 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1612347 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java

index fd5bb0366d95f1cf2d8ea914b7c3b2779e2552c4..d9d53f7ce4ae2fdcc795ed36ccca74f15fa8aba9 100644 (file)
@@ -135,14 +135,21 @@ public final class XSSFEvaluationWorkbook implements FormulaRenderingWorkbook, E
             // External reference - reference is 1 based, link table is 0 based
             int linkNumber = externalWorkbookNumber - 1;
             ExternalLinksTable linkTable = _uBook.getExternalLinksTable().get(linkNumber);
-            // TODO Return a more specialised form of this, see bug #56752
-            // Should include the cached values, for in case that book isn't available
-            // Should support XSSF stuff lookups
-            return new ExternalName(nameName, -1, -1);
+            
+            for (org.apache.poi.ss.usermodel.Name name : linkTable.getDefinedNames()) {
+                if (name.getNameName().equals(nameName)) {
+                    // TODO Return a more specialised form of this, see bug #56752
+                    // Should include the cached values, for in case that book isn't available
+                    // Should support XSSF stuff lookups
+                    return new ExternalName(nameName, -1, name.getSheetIndex());
+                }
+            }
+            throw new IllegalArgumentException("Name '"+nameName+"' not found in " +
+                                               "reference to " + linkTable.getLinkedFileName());
         } else {
             // Internal reference
             int nameIdx = _uBook.getNameIndex(nameName);
-            return new ExternalName(nameName, nameIdx, -1);  // TODO Is this right?
+            return new ExternalName(nameName, nameIdx, 0);  // TODO Is this right?
         }
            
     }