From a0ebce023bd451aa3bb75e917ddad868b70b6a29 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Fri, 25 Jul 2014 14:23:21 +0000 Subject: [PATCH] Update the XSSF getExternalSheet method signature, to start to prepare for sheet ranges git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1613439 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hssf/usermodel/HSSFEvaluationWorkbook.java | 2 +- .../apache/poi/ss/formula/EvaluationWorkbook.java | 2 +- .../poi/ss/formula/OperationEvaluationContext.java | 4 ++-- .../eval/forked/ForkedEvaluationWorkbook.java | 4 ++-- .../poi/xssf/usermodel/XSSFEvaluationWorkbook.java | 13 ++++++++++--- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java index aed26b66fb..79a59627a0 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java @@ -149,7 +149,7 @@ public final class HSSFEvaluationWorkbook implements FormulaRenderingWorkbook, E } return sheet; } - public ExternalSheet getExternalSheet(String sheetName, int externalWorkbookNumber) { + public ExternalSheet getExternalSheet(String firstSheetName, String lastSheetName, int externalWorkbookNumber) { throw new IllegalStateException("XSSF-style external references are not supported for HSSF"); } diff --git a/src/java/org/apache/poi/ss/formula/EvaluationWorkbook.java b/src/java/org/apache/poi/ss/formula/EvaluationWorkbook.java index 23474e87fc..b0a3c76060 100644 --- a/src/java/org/apache/poi/ss/formula/EvaluationWorkbook.java +++ b/src/java/org/apache/poi/ss/formula/EvaluationWorkbook.java @@ -52,7 +52,7 @@ public interface EvaluationWorkbook { * XSSF Only - fetch the external-style sheet details *

Return will have no workbook set if it's actually in our own workbook

*/ - ExternalSheet getExternalSheet(String sheetName, int externalWorkbookNumber); + ExternalSheet getExternalSheet(String firstSheetName, String lastSheetName, int externalWorkbookNumber); /** * HSSF Only - convert an external sheet index to an internal sheet index, * for an external-style reference to one of this workbook's own sheets diff --git a/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java b/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java index 96eb89c9b3..6cbc9c95b7 100644 --- a/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java +++ b/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java @@ -79,7 +79,7 @@ public final class OperationEvaluationContext { return createExternSheetRefEvaluator(ptg.getExternSheetIndex()); } SheetRefEvaluator createExternSheetRefEvaluator(String sheetName, int externalWorkbookNumber) { - ExternalSheet externalSheet = _workbook.getExternalSheet(sheetName, externalWorkbookNumber); + ExternalSheet externalSheet = _workbook.getExternalSheet(sheetName, null, externalWorkbookNumber); return createExternSheetRefEvaluator(externalSheet); } SheetRefEvaluator createExternSheetRefEvaluator(int externSheetIndex) { @@ -316,7 +316,7 @@ public final class OperationEvaluationContext { return getExternalNameXEval(externName, workbookName); } public ValueEval getNameXEval(NameXPxg nameXPxg) { - ExternalSheet externSheet = _workbook.getExternalSheet(nameXPxg.getSheetName(), nameXPxg.getExternalWorkbookNumber()); + ExternalSheet externSheet = _workbook.getExternalSheet(nameXPxg.getSheetName(), null, nameXPxg.getExternalWorkbookNumber()); if(externSheet == null || externSheet.getWorkbookName() == null) { // External reference to our own workbook's name return getLocalNameXEval(nameXPxg); diff --git a/src/java/org/apache/poi/ss/formula/eval/forked/ForkedEvaluationWorkbook.java b/src/java/org/apache/poi/ss/formula/eval/forked/ForkedEvaluationWorkbook.java index 93d3ec5565..a42815a07e 100644 --- a/src/java/org/apache/poi/ss/formula/eval/forked/ForkedEvaluationWorkbook.java +++ b/src/java/org/apache/poi/ss/formula/eval/forked/ForkedEvaluationWorkbook.java @@ -90,8 +90,8 @@ final class ForkedEvaluationWorkbook implements EvaluationWorkbook { public ExternalSheet getExternalSheet(int externSheetIndex) { return _masterBook.getExternalSheet(externSheetIndex); } - public ExternalSheet getExternalSheet(String sheetName, int externalWorkbookNumber) { - return _masterBook.getExternalSheet(sheetName, externalWorkbookNumber); + public ExternalSheet getExternalSheet(String firstSheetName, String lastSheetName, int externalWorkbookNumber) { + return _masterBook.getExternalSheet(firstSheetName, lastSheetName, externalWorkbookNumber); } public Ptg[] getFormulaTokens(EvaluationCell cell) { 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 d51d9a6a6d..396e5cc136 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFEvaluationWorkbook.java @@ -233,15 +233,22 @@ public final class XSSFEvaluationWorkbook implements FormulaRenderingWorkbook, E public ExternalSheet getExternalSheet(int externSheetIndex) { throw new IllegalStateException("HSSF-style external references are not supported for XSSF"); } - public ExternalSheet getExternalSheet(String sheetName, int externalWorkbookNumber) { + public ExternalSheet getExternalSheet(String firstSheetName, String lastSheetName, int externalWorkbookNumber) { + String workbookName; if (externalWorkbookNumber > 0) { // External reference - reference is 1 based, link table is 0 based int linkNumber = externalWorkbookNumber - 1; ExternalLinksTable linkTable = _uBook.getExternalLinksTable().get(linkNumber); - return new ExternalSheet(linkTable.getLinkedFileName(), sheetName); + workbookName = linkTable.getLinkedFileName(); } else { // Internal reference - return new ExternalSheet(null, sheetName); + workbookName = null; + } + + if (lastSheetName == null || firstSheetName.equals(lastSheetName)) { + return new ExternalSheet(workbookName, firstSheetName); + } else { + return new ExternalSheetRange(workbookName, firstSheetName, lastSheetName); } } -- 2.39.5