80 lines
2.3 KiB
Java
80 lines
2.3 KiB
Java
package jxl.read.biff;
|
|
|
|
import common.Logger;
|
|
import java.text.DecimalFormat;
|
|
import java.text.NumberFormat;
|
|
import jxl.CellType;
|
|
import jxl.NumberCell;
|
|
import jxl.NumberFormulaCell;
|
|
import jxl.biff.DoubleHelper;
|
|
import jxl.biff.FormattingRecords;
|
|
import jxl.biff.FormulaData;
|
|
import jxl.biff.WorkbookMethods;
|
|
import jxl.biff.formula.ExternalSheet;
|
|
import jxl.biff.formula.FormulaException;
|
|
import jxl.biff.formula.FormulaParser;
|
|
|
|
class NumberFormulaRecord extends CellValue implements NumberCell, FormulaData, NumberFormulaCell {
|
|
private static Logger logger = Logger.getLogger(NumberFormulaRecord.class);
|
|
|
|
private double value;
|
|
|
|
private NumberFormat format;
|
|
|
|
private static final DecimalFormat defaultFormat = new DecimalFormat("#.###");
|
|
|
|
private String formulaString;
|
|
|
|
private ExternalSheet externalSheet;
|
|
|
|
private WorkbookMethods nameTable;
|
|
|
|
private byte[] data;
|
|
|
|
public NumberFormulaRecord(Record t, FormattingRecords fr, ExternalSheet es, WorkbookMethods nt, SheetImpl si) {
|
|
super(t, fr, si);
|
|
this.externalSheet = es;
|
|
this.nameTable = nt;
|
|
this.data = getRecord().getData();
|
|
this.format = fr.getNumberFormat(getXFIndex());
|
|
if (this.format == null)
|
|
this.format = defaultFormat;
|
|
this.value = DoubleHelper.getIEEEDouble(this.data, 6);
|
|
}
|
|
|
|
public double getValue() {
|
|
return this.value;
|
|
}
|
|
|
|
public String getContents() {
|
|
return !Double.isNaN(this.value) ? this.format.format(this.value) : "";
|
|
}
|
|
|
|
public CellType getType() {
|
|
return CellType.NUMBER_FORMULA;
|
|
}
|
|
|
|
public byte[] getFormulaData() throws FormulaException {
|
|
if (!getSheet().getWorkbookBof().isBiff8())
|
|
throw new FormulaException(FormulaException.biff8Supported);
|
|
byte[] d = new byte[this.data.length - 6];
|
|
System.arraycopy(this.data, 6, d, 0, this.data.length - 6);
|
|
return d;
|
|
}
|
|
|
|
public String getFormula() throws FormulaException {
|
|
if (this.formulaString == null) {
|
|
byte[] tokens = new byte[this.data.length - 22];
|
|
System.arraycopy(this.data, 22, tokens, 0, tokens.length);
|
|
FormulaParser fp = new FormulaParser(tokens, this, this.externalSheet, this.nameTable, getSheet().getWorkbook().getSettings());
|
|
fp.parse();
|
|
this.formulaString = fp.getFormula();
|
|
}
|
|
return this.formulaString;
|
|
}
|
|
|
|
public NumberFormat getNumberFormat() {
|
|
return this.format;
|
|
}
|
|
}
|