Bug 54720: Support for Row/Col Area Range like 8:8 or H:H
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1514812 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
baee918c5a
commit
a727830c61
@ -37,6 +37,7 @@ import org.apache.poi.ss.util.CellReference.NameType;
|
||||
* For POI internal use only
|
||||
*
|
||||
* @author Josh Micich
|
||||
* @author Cédric Walter
|
||||
*/
|
||||
public final class OperationEvaluationContext {
|
||||
public static final FreeRefFunction UDF = UserDefinedFunction.instance;
|
||||
@ -83,13 +84,13 @@ public final class OperationEvaluationContext {
|
||||
} else {
|
||||
// look up sheet by name from external workbook
|
||||
String workbookName = externalSheet.getWorkbookName();
|
||||
try {
|
||||
targetEvaluator = _bookEvaluator.getOtherWorkbookEvaluator(workbookName);
|
||||
} catch (WorkbookNotFoundException e) {
|
||||
throw new RuntimeException(e.getMessage(), e);
|
||||
}
|
||||
otherSheetIndex = targetEvaluator.getSheetIndex(externalSheet.getSheetName());
|
||||
if (otherSheetIndex < 0) {
|
||||
try {
|
||||
targetEvaluator = _bookEvaluator.getOtherWorkbookEvaluator(workbookName);
|
||||
} catch (WorkbookNotFoundException e) {
|
||||
throw new RuntimeException(e.getMessage(), e);
|
||||
}
|
||||
otherSheetIndex = targetEvaluator.getSheetIndex(externalSheet.getSheetName());
|
||||
if (otherSheetIndex < 0) {
|
||||
throw new RuntimeException("Invalid sheet name '" + externalSheet.getSheetName()
|
||||
+ "' in bool '" + workbookName + "'.");
|
||||
}
|
||||
@ -195,16 +196,32 @@ public final class OperationEvaluationContext {
|
||||
int firstRow, firstCol, lastRow, lastCol;
|
||||
switch (part1refType) {
|
||||
case COLUMN:
|
||||
firstRow =0;
|
||||
lastRow = ssVersion.getLastRowIndex();
|
||||
firstCol = parseColRef(refStrPart1);
|
||||
lastCol = parseColRef(refStrPart2);
|
||||
break;
|
||||
firstRow =0;
|
||||
if (part2refType.equals(NameType.COLUMN))
|
||||
{
|
||||
lastRow = ssVersion.getLastRowIndex();
|
||||
firstCol = parseRowRef(refStrPart1);
|
||||
lastCol = parseRowRef(refStrPart2);
|
||||
}
|
||||
else {
|
||||
lastRow = ssVersion.getLastRowIndex();
|
||||
firstCol = parseColRef(refStrPart1);
|
||||
lastCol = parseColRef(refStrPart2);
|
||||
}
|
||||
break;
|
||||
case ROW:
|
||||
firstCol = 0;
|
||||
lastCol = ssVersion.getLastColumnIndex();
|
||||
firstRow = parseRowRef(refStrPart1);
|
||||
lastRow = parseRowRef(refStrPart2);
|
||||
// support of cell range in the form of integer:integer
|
||||
firstCol = 0;
|
||||
if (part2refType.equals(NameType.ROW))
|
||||
{
|
||||
firstRow = parseColRef(refStrPart1);
|
||||
lastRow = parseColRef(refStrPart2);
|
||||
lastCol = ssVersion.getLastColumnIndex();
|
||||
} else {
|
||||
lastCol = ssVersion.getLastColumnIndex();
|
||||
firstRow = parseRowRef(refStrPart1);
|
||||
lastRow = parseRowRef(refStrPart2);
|
||||
}
|
||||
break;
|
||||
case CELL:
|
||||
CellReference cr;
|
||||
|
@ -0,0 +1,35 @@
|
||||
/* ====================================================================
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.ss.formula.functions;
|
||||
|
||||
/**
|
||||
* Tests INDIRECT() as loaded from a test data spreadsheet.<p/>
|
||||
*
|
||||
* Tests for bug fixes and specific/tricky behaviour can be found in the corresponding test class
|
||||
* (<tt>TestXxxx</tt>) of the target (<tt>Xxxx</tt>) implementor, where execution can be observed
|
||||
* more easily.
|
||||
*
|
||||
* @author Cédric Walter
|
||||
*/
|
||||
public final class TestIndirectFunctionFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
|
||||
|
||||
@Override
|
||||
protected String getFilename() {
|
||||
return "IndirectFunctionTestCaseData.xls";
|
||||
}
|
||||
}
|
@ -20,16 +20,13 @@ package org.apache.poi.ss.formula.functions;
|
||||
|
||||
|
||||
/**
|
||||
* Tests lookup functions (VLOOKUP, HLOOKUP, LOOKUP, MATCH) as loaded from a test data spreadsheet.<p/>
|
||||
* These tests have been separated from the common function and operator tests because the lookup
|
||||
* functions have more complex test cases and test data setup.
|
||||
* Tests Match functions as loaded from a test data spreadsheet.<p/>
|
||||
*
|
||||
* Tests for bug fixes and specific/tricky behaviour can be found in the corresponding test class
|
||||
* (<tt>TestXxxx</tt>) of the target (<tt>Xxxx</tt>) implementor, where execution can be observed
|
||||
* more easily.
|
||||
*
|
||||
* @author Josh Micich
|
||||
* @author Cedric Walter at innoveo.com
|
||||
* @author Cédric Walter
|
||||
*/
|
||||
public final class TestMatchFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
|
||||
|
||||
|
BIN
test-data/spreadsheet/IndirectFunctionTestCaseData.xls
Normal file
BIN
test-data/spreadsheet/IndirectFunctionTestCaseData.xls
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user