Files
HRMS/hrmsEjb/jxl/read/biff/FormulaRecord.java
2025-07-28 13:56:49 +05:30

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;
}
}