12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- /* ====================================================================
- 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;
-
- import org.apache.poi.ss.formula.eval.AreaEval;
- import org.apache.poi.ss.formula.eval.AreaEvalBase;
- import org.apache.poi.ss.formula.eval.ValueEval;
- import org.apache.poi.ss.formula.ptg.AreaI;
- import org.apache.poi.ss.formula.ptg.AreaI.OffsetArea;
- import org.apache.poi.ss.util.CellReference;
-
- /**
- * Provides Lazy Evaluation to 3D Ranges
- */
- final class LazyAreaEval extends AreaEvalBase {
- private final SheetRangeEvaluator _evaluator;
-
- LazyAreaEval(AreaI ptg, SheetRangeEvaluator evaluator) {
- super(ptg, evaluator);
- _evaluator = evaluator;
- }
-
- public LazyAreaEval(int firstRowIndex, int firstColumnIndex, int lastRowIndex,
- int lastColumnIndex, SheetRangeEvaluator evaluator) {
- super(evaluator, firstRowIndex, firstColumnIndex, lastRowIndex, lastColumnIndex);
- _evaluator = evaluator;
- }
-
- public ValueEval getRelativeValue(int relativeRowIndex, int relativeColumnIndex) {
- return getRelativeValue(getFirstSheetIndex(), relativeRowIndex, relativeColumnIndex);
- }
- public ValueEval getRelativeValue(int sheetIndex, int relativeRowIndex, int relativeColumnIndex) {
- int rowIx = (relativeRowIndex + getFirstRow() ) ;
- int colIx = (relativeColumnIndex + getFirstColumn() ) ;
-
- return _evaluator.getEvalForCell(sheetIndex, rowIx, colIx);
- }
-
- public AreaEval offset(int relFirstRowIx, int relLastRowIx, int relFirstColIx, int relLastColIx) {
- AreaI area = new OffsetArea(getFirstRow(), getFirstColumn(),
- relFirstRowIx, relLastRowIx, relFirstColIx, relLastColIx);
-
- return new LazyAreaEval(area, _evaluator);
- }
- public LazyAreaEval getRow(int rowIndex) {
- if (rowIndex >= getHeight()) {
- throw new IllegalArgumentException("Invalid rowIndex " + rowIndex
- + ". Allowable range is (0.." + getHeight() + ").");
- }
- int absRowIx = getFirstRow() + rowIndex;
- return new LazyAreaEval(absRowIx, getFirstColumn(), absRowIx, getLastColumn(), _evaluator);
- }
- public LazyAreaEval getColumn(int columnIndex) {
- if (columnIndex >= getWidth()) {
- throw new IllegalArgumentException("Invalid columnIndex " + columnIndex
- + ". Allowable range is (0.." + getWidth() + ").");
- }
- int absColIx = getFirstColumn() + columnIndex;
- return new LazyAreaEval(getFirstRow(), absColIx, getLastRow(), absColIx, _evaluator);
- }
-
- public String toString() {
- CellReference crA = new CellReference(getFirstRow(), getFirstColumn());
- CellReference crB = new CellReference(getLastRow(), getLastColumn());
- return getClass().getName() + "[" +
- _evaluator.getSheetNameRange() +
- '!' +
- crA.formatAsString() +
- ':' +
- crB.formatAsString() +
- "]";
- }
-
- /**
- * @return whether cell at rowIndex and columnIndex is a subtotal
- */
- public boolean isSubTotal(int rowIndex, int columnIndex){
- // delegate the query to the sheet evaluator which has access to internal ptgs
- SheetRefEvaluator _sre = _evaluator.getSheetEvaluator(_evaluator.getFirstSheetIndex());
- return _sre.isSubTotal(getFirstRow() + rowIndex, getFirstColumn() + columnIndex);
- }
- }
|