Use the link table when looking up external xssf names

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1612347 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2014-07-21 16:52:19 +00:00
parent 12e87a1900
commit 56b7f9f365

View 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?
}
}