public FormulaRecord(Record t,
File excelFile,
FormattingRecords fr,
ExternalSheet es,
WorkbookMethods nt,
SheetImpl si,
WorkbookSettings ws) {
super(t, fr, si);
byte[] data = getRecord().getData();
shared = false;
// Check to see if this forms part of a shared formula
int grbit = IntegerHelper.getInt(data[14], data[15]);
if ((grbit & 0x08) != 0)
{
shared = true;
if (data[6] == 0 && data[12] == -1 && data[13] == -1)
{
// It is a shared string formula
formula = new SharedStringFormulaRecord
(t, excelFile, fr, es, nt, si, ws);
}
else if (data[6] == 3 && data[12] == -1 && data[13] == -1)
{
// We have a string which evaluates to null
formula = new SharedStringFormulaRecord
(t, excelFile, fr, es, nt, si,
SharedStringFormulaRecord.EMPTY_STRING);
}
else if (data[6] == 2 &&
data[12] == -1 &&
data[13] == -1)
{
// The cell is in error
int errorCode = data[8];
formula = new SharedErrorFormulaRecord(t, excelFile, errorCode,
fr, es, nt, si);
}
else if (data[6] == 1 &&
data[12] == -1 &&
data[13] == -1)
{
boolean value = data[8] == 1 ? true : false;
formula = new SharedBooleanFormulaRecord
(t, excelFile, value, fr, es, nt, si);
}
else
{
// It is a numerical formula
double value = DoubleHelper.getIEEEDouble(data, 6);
SharedNumberFormulaRecord snfr = new SharedNumberFormulaRecord
(t, excelFile, value, fr, es, nt, si);
snfr.setNumberFormat(fr.getNumberFormat(getXFIndex()));
formula = snfr;
}
return;
}
// microsoft and their goddam magic values determine whether this
// is a string or a number value
if (data[6] == 0 && data[12] == -1 && data[13] == -1)
{
// we have a string
formula = new StringFormulaRecord(t, excelFile, fr, es, nt, si, ws);
}
else if (data[6] == 1 &&
data[12] == -1 &&
data[13] == -1)
{
// We have a boolean formula
// multiple values. Thanks to Frank for spotting this
formula = new BooleanFormulaRecord(t, fr, es, nt, si);
}
else if (data[6] == 2 &&
data[12] == -1 &&
data[13] == -1)
{
// The cell is in error
formula = new ErrorFormulaRecord(t, fr, es, nt, si);
}
else if (data[6] == 3 && data[12] == -1 && data[13] == -1)
{
// we have a string which evaluates to null
formula = new StringFormulaRecord(t, fr, es, nt, si);
}
else
{
// it is most assuredly a number
formula = new NumberFormulaRecord(t, fr, es, nt, si);
}
}
Constructs this object from the raw data. Creates either a
NumberFormulaRecord or a StringFormulaRecord depending on whether
this formula represents a numerical calculation or not Parameters:
t - the raw data
excelFile - the excel file
fr - the formatting records
es - the workbook, which contains the external sheet references
nt - the name table
si - the sheet
ws - the workbook settings
|
public FormulaRecord(Record t,
File excelFile,
FormattingRecords fr,
ExternalSheet es,
WorkbookMethods nt,
FormulaRecord.IgnoreSharedFormula i,
SheetImpl si,
WorkbookSettings ws) {
super(t, fr, si);
byte[] data = getRecord().getData();
shared = false;
// microsoft and their magic values determine whether this
// is a string or a number value
if (data[6] == 0 && data[12] == -1 && data[13] == -1)
{
// we have a string
formula = new StringFormulaRecord(t, excelFile, fr, es, nt, si, ws);
}
else if (data[6] == 1 &&
data[12] == -1 &&
data[13] == -1)
{
// We have a boolean formula
// multiple values. Thanks to Frank for spotting this
formula = new BooleanFormulaRecord(t, fr, es, nt, si);
}
else if (data[6] == 2 &&
data[12] == -1 &&
data[13] == -1)
{
// The cell is in error
formula = new ErrorFormulaRecord(t, fr, es, nt, si);
}
else
{
// it is most assuredly a number
formula = new NumberFormulaRecord(t, fr, es, nt, si);
}
}
Constructs this object from the raw data. Creates either a
NumberFormulaRecord or a StringFormulaRecord depending on whether
this formula represents a numerical calculation or not Parameters:
t - the raw data
excelFile - the excel file
fr - the formatting records
es - the workbook, which contains the external sheet references
nt - the name table
i - a dummy override to indicate that we don't want to do
any shared formula processing
si - the sheet impl
ws - the workbook settings
|