From: Nick Burch Date: Fri, 18 Jul 2014 22:50:54 +0000 (+0000) Subject: Bit more towards XSSF name support for #56737, will need some deeper changes though... X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=551573dd9575fb1c7be01ddb0b3193ff9e8c2d0f;p=poi.git Bit more towards XSSF name support for #56737, will need some deeper changes though to fully implement git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1611830 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java index 660f2dc40c..ea9f93d619 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java @@ -103,16 +103,39 @@ public final class XSSFEvaluationWorkbook implements FormulaRenderingWorkbook, E } public NameXPtg getNameXPtg(String name, int sheetRefIndex) { + // First, try to find it as a User Defined Function IndexedUDFFinder udfFinder = (IndexedUDFFinder)getUDFFinder(); FreeRefFunction func = udfFinder.findFunction(name); - if(func == null) return null; - else return new NameXPtg(0, udfFinder.getFunctionIndex(name)); + if (func != null) { + return new NameXPtg(0, udfFinder.getFunctionIndex(name)); + } + + // Otherwise, try it as a named range + XSSFName xname = _uBook.getName(name); + if (xname != null) { + int nameAt = _uBook.getNameIndex(name); + return new NameXPtg(xname.getSheetIndex(), nameAt); + } else { + return null; + } } public String resolveNameXText(NameXPtg n) { int idx = n.getNameIndex(); + String name = null; + + // First, try to find it as a User Defined Function IndexedUDFFinder udfFinder = (IndexedUDFFinder)getUDFFinder(); - return udfFinder.getFunctionName(idx); + name = udfFinder.getFunctionName(idx); + if (name != null) return name; + + // Otherwise, try it as a named range + XSSFName xname = _uBook.getNameAt(idx); + if (xname != null) { + name = xname.getNameName(); + } + + return name; } public EvaluationSheet getSheet(int sheetIndex) { diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index ad6f693ab2..9421b56348 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -2678,10 +2678,5 @@ public final class TestBugs extends BaseTestBugzillaIssues { // Try to evaluate everything eval.evaluateAll(); - - // Try to set the same kinds of formula elsewhere - Cell newF = s.getRow(0).createCell(10, Cell.CELL_TYPE_FORMULA); - // TODO Fix this - //newF.setCellFormula("Defines!NR_To_A1"); } } diff --git a/test-data/spreadsheet/ref-56737.xlsx b/test-data/spreadsheet/ref-56737.xlsx new file mode 100644 index 0000000000..3703827391 Binary files /dev/null and b/test-data/spreadsheet/ref-56737.xlsx differ