140 lines
4.9 KiB
Java
140 lines
4.9 KiB
Java
/* ====================================================================
|
|
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.SpreadsheetVersion;
|
|
import org.apache.poi.ss.formula.ptg.NamePtg;
|
|
import org.apache.poi.ss.formula.ptg.NameXPtg;
|
|
import org.apache.poi.ss.formula.ptg.Ptg;
|
|
import org.apache.poi.ss.formula.udf.UDFFinder;
|
|
import org.apache.poi.util.Internal;
|
|
|
|
/**
|
|
* Abstracts a workbook for the purpose of formula evaluation.<br/>
|
|
*
|
|
* For POI internal use only
|
|
*
|
|
* @author Josh Micich
|
|
*/
|
|
@Internal
|
|
public interface EvaluationWorkbook {
|
|
String getSheetName(int sheetIndex);
|
|
/**
|
|
* @return -1 if the specified sheet is from a different book
|
|
*/
|
|
int getSheetIndex(EvaluationSheet sheet);
|
|
/**
|
|
* Finds a sheet index by case insensitive name.
|
|
* @return the index of the sheet matching the specified name. -1 if not found
|
|
*/
|
|
int getSheetIndex(String sheetName);
|
|
|
|
EvaluationSheet getSheet(int sheetIndex);
|
|
|
|
/**
|
|
* HSSF Only - fetch the external-style sheet details
|
|
* <p>Return will have no workbook set if it's actually in our own workbook</p>
|
|
*/
|
|
ExternalSheet getExternalSheet(int externSheetIndex);
|
|
/**
|
|
* XSSF Only - fetch the external-style sheet details
|
|
* <p>Return will have no workbook set if it's actually in our own workbook</p>
|
|
*/
|
|
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
|
|
*/
|
|
int convertFromExternSheetIndex(int externSheetIndex);
|
|
|
|
/**
|
|
* HSSF Only - fetch the external-style name details
|
|
*/
|
|
ExternalName getExternalName(int externSheetIndex, int externNameIndex);
|
|
/**
|
|
* XSSF Only - fetch the external-style name details
|
|
*/
|
|
ExternalName getExternalName(String nameName, String sheetName, int externalWorkbookNumber);
|
|
|
|
EvaluationName getName(NamePtg namePtg);
|
|
EvaluationName getName(String name, int sheetIndex);
|
|
String resolveNameXText(NameXPtg ptg);
|
|
Ptg[] getFormulaTokens(EvaluationCell cell);
|
|
UDFFinder getUDFFinder();
|
|
SpreadsheetVersion getSpreadsheetVersion();
|
|
|
|
/**
|
|
* Propagated from {@link WorkbookEvaluator#clearAllCachedResultValues()} to clear locally cached data.
|
|
* Implementations must call the same method on all referenced {@link EvaluationSheet} instances, as well as clearing local caches.
|
|
* @see WorkbookEvaluator#clearAllCachedResultValues()
|
|
*
|
|
* @since POI 3.15 beta 3
|
|
*/
|
|
public void clearAllCachedResultValues();
|
|
|
|
class ExternalSheet {
|
|
private final String _workbookName;
|
|
private final String _sheetName;
|
|
|
|
public ExternalSheet(String workbookName, String sheetName) {
|
|
_workbookName = workbookName;
|
|
_sheetName = sheetName;
|
|
}
|
|
public String getWorkbookName() {
|
|
return _workbookName;
|
|
}
|
|
public String getSheetName() {
|
|
return _sheetName;
|
|
}
|
|
}
|
|
class ExternalSheetRange extends ExternalSheet {
|
|
private final String _lastSheetName;
|
|
public ExternalSheetRange(String workbookName, String firstSheetName, String lastSheetName) {
|
|
super(workbookName, firstSheetName);
|
|
this._lastSheetName = lastSheetName;
|
|
}
|
|
|
|
public String getFirstSheetName() {
|
|
return getSheetName();
|
|
}
|
|
public String getLastSheetName() {
|
|
return _lastSheetName;
|
|
}
|
|
}
|
|
class ExternalName {
|
|
private final String _nameName;
|
|
private final int _nameNumber;
|
|
private final int _ix;
|
|
|
|
public ExternalName(String nameName, int nameNumber, int ix) {
|
|
_nameName = nameName;
|
|
_nameNumber = nameNumber;
|
|
_ix = ix;
|
|
}
|
|
public String getName() {
|
|
return _nameName;
|
|
}
|
|
public int getNumber() {
|
|
return _nameNumber;
|
|
}
|
|
public int getIx() {
|
|
return _ix;
|
|
}
|
|
}
|
|
}
|