92 lines
3.2 KiB
Java
92 lines
3.2 KiB
Java
package jxl.read.biff;
|
|
|
|
import common.Assert;
|
|
import common.Logger;
|
|
import jxl.CellType;
|
|
import jxl.WorkbookSettings;
|
|
import jxl.biff.DoubleHelper;
|
|
import jxl.biff.FormattingRecords;
|
|
import jxl.biff.IntegerHelper;
|
|
import jxl.biff.WorkbookMethods;
|
|
import jxl.biff.formula.ExternalSheet;
|
|
|
|
class FormulaRecord extends CellValue {
|
|
private static Logger logger = Logger.getLogger(FormulaRecord.class);
|
|
|
|
private CellValue formula;
|
|
|
|
private boolean shared;
|
|
|
|
private static class IgnoreSharedFormula {
|
|
private IgnoreSharedFormula() {}
|
|
}
|
|
|
|
public static final IgnoreSharedFormula ignoreSharedFormula = new IgnoreSharedFormula();
|
|
|
|
public FormulaRecord(Record t, File excelFile, FormattingRecords fr, ExternalSheet es, WorkbookMethods nt, SheetImpl si, WorkbookSettings ws) {
|
|
super(t, fr, si);
|
|
byte[] data = getRecord().getData();
|
|
this.shared = false;
|
|
int grbit = IntegerHelper.getInt(data[14], data[15]);
|
|
if ((grbit & 0x8) != 0) {
|
|
this.shared = true;
|
|
if (data[6] == 0 && data[12] == -1 && data[13] == -1) {
|
|
this.formula = new SharedStringFormulaRecord(t, excelFile, fr, es, nt, si, ws);
|
|
} else if (data[6] == 2 && data[12] == -1 && data[13] == -1) {
|
|
int errorCode = data[8];
|
|
this.formula = new SharedErrorFormulaRecord(t, excelFile, errorCode, fr, es, nt, si);
|
|
} else {
|
|
double value = DoubleHelper.getIEEEDouble(data, 6);
|
|
SharedNumberFormulaRecord snfr = new SharedNumberFormulaRecord(t, excelFile, value, fr, es, nt, si);
|
|
snfr.setNumberFormat(fr.getNumberFormat(getXFIndex()));
|
|
this.formula = snfr;
|
|
}
|
|
return;
|
|
}
|
|
if (data[6] == 0 && data[12] == -1 && data[13] == -1) {
|
|
this.formula = new StringFormulaRecord(t, excelFile, fr, es, nt, si, ws);
|
|
} else if (data[6] == 1 && data[12] == -1 && data[13] == -1) {
|
|
this.formula = new BooleanFormulaRecord(t, fr, es, nt, si);
|
|
} else if (data[6] == 2 && data[12] == -1 && data[13] == -1) {
|
|
this.formula = new ErrorFormulaRecord(t, fr, es, nt, si);
|
|
} else if (data[6] == 3 && data[12] == -1 && data[13] == -1) {
|
|
this.formula = new StringFormulaRecord(t, fr, es, nt, si);
|
|
} else {
|
|
this.formula = new NumberFormulaRecord(t, fr, es, nt, si);
|
|
}
|
|
}
|
|
|
|
public FormulaRecord(Record t, File excelFile, FormattingRecords fr, ExternalSheet es, WorkbookMethods nt, IgnoreSharedFormula i, SheetImpl si, WorkbookSettings ws) {
|
|
super(t, fr, si);
|
|
byte[] data = getRecord().getData();
|
|
this.shared = false;
|
|
if (data[6] == 0 && data[12] == -1 && data[13] == -1) {
|
|
this.formula = new StringFormulaRecord(t, excelFile, fr, es, nt, si, ws);
|
|
} else if (data[6] == 1 && data[12] == -1 && data[13] == -1) {
|
|
this.formula = new BooleanFormulaRecord(t, fr, es, nt, si);
|
|
} else if (data[6] == 2 && data[12] == -1 && data[13] == -1) {
|
|
this.formula = new ErrorFormulaRecord(t, fr, es, nt, si);
|
|
} else {
|
|
this.formula = new NumberFormulaRecord(t, fr, es, nt, si);
|
|
}
|
|
}
|
|
|
|
public String getContents() {
|
|
Assert.verify(false);
|
|
return "";
|
|
}
|
|
|
|
public CellType getType() {
|
|
Assert.verify(false);
|
|
return CellType.EMPTY;
|
|
}
|
|
|
|
final CellValue getFormula() {
|
|
return this.formula;
|
|
}
|
|
|
|
final boolean isShared() {
|
|
return this.shared;
|
|
}
|
|
}
|