From de3ba9dc6a83123b4d8d28a4cedf07e009423592 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Fri, 18 Jul 2014 22:50:54 +0000 Subject: [PATCH] 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 --- .../usermodel/XSSFEvaluationWorkbook.java | 29 ++++++++++++++++-- .../apache/poi/hssf/usermodel/TestBugs.java | 5 --- test-data/spreadsheet/ref-56737.xlsx | Bin 0 -> 10427 bytes 3 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 test-data/spreadsheet/ref-56737.xlsx 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 0000000000000000000000000000000000000000..370382739132267be5b07aae972439b6fa8d15c8 GIT binary patch literal 10427 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