2008-09-18 17:22:23 -04:00
|
|
|
package org.apache.poi.hssf.usermodel;
|
|
|
|
|
2008-09-18 22:19:58 -04:00
|
|
|
import org.apache.poi.hssf.model.HSSFFormulaParser;
|
2008-09-18 17:22:23 -04:00
|
|
|
import org.apache.poi.hssf.model.Workbook;
|
2008-09-18 22:19:58 -04:00
|
|
|
import org.apache.poi.hssf.record.NameRecord;
|
2008-09-18 17:22:23 -04:00
|
|
|
import org.apache.poi.hssf.record.formula.NamePtg;
|
|
|
|
import org.apache.poi.hssf.record.formula.NameXPtg;
|
2008-09-18 22:19:58 -04:00
|
|
|
import org.apache.poi.hssf.record.formula.Ptg;
|
|
|
|
import org.apache.poi.ss.formula.EvaluationName;
|
|
|
|
import org.apache.poi.ss.formula.EvaluationWorkbook;
|
|
|
|
import org.apache.poi.ss.formula.FormulaParsingWorkbook;
|
2008-09-18 17:22:23 -04:00
|
|
|
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Internal POI use only
|
|
|
|
*
|
|
|
|
* @author Josh Micich
|
|
|
|
*/
|
2008-09-18 22:19:58 -04:00
|
|
|
public final class HSSFEvaluationWorkbook implements FormulaRenderingWorkbook, EvaluationWorkbook, FormulaParsingWorkbook {
|
2008-09-18 17:22:23 -04:00
|
|
|
|
2008-09-18 22:19:58 -04:00
|
|
|
private final HSSFWorkbook _uBook;
|
2008-09-18 17:22:23 -04:00
|
|
|
private final Workbook _iBook;
|
|
|
|
|
|
|
|
public static HSSFEvaluationWorkbook create(HSSFWorkbook book) {
|
|
|
|
if (book == null) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
return new HSSFEvaluationWorkbook(book);
|
|
|
|
}
|
|
|
|
|
|
|
|
private HSSFEvaluationWorkbook(HSSFWorkbook book) {
|
2008-09-18 22:19:58 -04:00
|
|
|
_uBook = book;
|
2008-09-18 17:22:23 -04:00
|
|
|
_iBook = book.getWorkbook();
|
|
|
|
}
|
|
|
|
|
2008-09-18 22:19:58 -04:00
|
|
|
public int getExternalSheetIndex(String sheetName) {
|
|
|
|
int sheetIndex = _uBook.getSheetIndex(sheetName);
|
|
|
|
return _iBook.checkExternSheet(sheetIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
public EvaluationName getName(int index) {
|
|
|
|
return new Name(_iBook.getNameRecord(index), index);
|
|
|
|
}
|
|
|
|
|
|
|
|
public EvaluationName getName(String name) {
|
|
|
|
for(int i=0; i < _iBook.getNumNames(); i++) {
|
|
|
|
NameRecord nr = _iBook.getNameRecord(i);
|
|
|
|
if (name.equalsIgnoreCase(nr.getNameText())) {
|
|
|
|
return new Name(nr, i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getSheetIndex(HSSFSheet sheet) {
|
|
|
|
return _uBook.getSheetIndex(sheet);
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getSheetName(int sheetIndex) {
|
|
|
|
return _uBook.getSheetName(sheetIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getNameIndex(String name) {
|
|
|
|
return _uBook.getNameIndex(name);
|
|
|
|
}
|
|
|
|
|
|
|
|
public NameXPtg getNameXPtg(String name) {
|
|
|
|
return _iBook.getNameXPtg(name);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HSSFSheet getSheet(int sheetIndex) {
|
|
|
|
return _uBook.getSheetAt(sheetIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HSSFSheet getSheetByExternSheetIndex(int externSheetIndex) {
|
|
|
|
int sheetIndex = _iBook.getSheetIndexFromExternSheetIndex(externSheetIndex);
|
|
|
|
return _uBook.getSheetAt(sheetIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
public HSSFWorkbook getWorkbook() {
|
|
|
|
return _uBook;
|
|
|
|
}
|
|
|
|
|
2008-09-18 17:22:23 -04:00
|
|
|
public String resolveNameXText(NameXPtg n) {
|
|
|
|
return _iBook.resolveNameXText(n.getSheetRefIndex(), n.getNameIndex());
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getSheetNameByExternSheet(int externSheetIndex) {
|
|
|
|
return _iBook.findSheetNameFromExternSheet(externSheetIndex);
|
|
|
|
}
|
|
|
|
public String getNameText(NamePtg namePtg) {
|
|
|
|
return _iBook.getNameRecord(namePtg.getIndex()).getNameText();
|
|
|
|
}
|
2008-09-18 22:19:58 -04:00
|
|
|
public EvaluationName getName(NamePtg namePtg) {
|
|
|
|
int ix = namePtg.getIndex();
|
|
|
|
return new Name(_iBook.getNameRecord(ix), ix);
|
|
|
|
}
|
|
|
|
public Ptg[] getFormulaTokens(HSSFCell cell) {
|
|
|
|
return HSSFFormulaParser.parse(cell.getCellFormula(), _uBook);
|
|
|
|
}
|
|
|
|
|
|
|
|
private static final class Name implements EvaluationName {
|
|
|
|
|
|
|
|
private final NameRecord _nameRecord;
|
|
|
|
private final int _index;
|
|
|
|
|
|
|
|
public Name(NameRecord nameRecord, int index) {
|
|
|
|
_nameRecord = nameRecord;
|
|
|
|
_index = index;
|
|
|
|
}
|
|
|
|
|
|
|
|
public Ptg[] getNameDefinition() {
|
|
|
|
return _nameRecord.getNameDefinition();
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getNameText() {
|
|
|
|
return _nameRecord.getNameText();
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean hasFormula() {
|
|
|
|
return _nameRecord.hasFormula();
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isFunctionName() {
|
|
|
|
return _nameRecord.isFunctionName();
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean isRange() {
|
|
|
|
return _nameRecord.hasFormula(); // TODO - is this right?
|
|
|
|
}
|
|
|
|
public NamePtg createPtg() {
|
|
|
|
return new NamePtg(_index);
|
|
|
|
}
|
|
|
|
}
|
2008-09-18 17:22:23 -04:00
|
|
|
}
|