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 660f2dc40..ea9f93d61 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 ad6f693ab..9421b5634 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 000000000..370382739 Binary files /dev/null and b/test-data/spreadsheet/ref-56737.xlsx differ