Formula changes. . Disable for 1.5...alow compile in if desired.
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@352431 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
310413425e
commit
29911b8674
@ -630,6 +630,11 @@ public class BiffViewer
|
|||||||
case LinkedDataRecord.sid:
|
case LinkedDataRecord.sid:
|
||||||
retval = new LinkedDataRecord(rectype, size, data);
|
retval = new LinkedDataRecord(rectype, size, data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case FormulaRecord.sid:
|
||||||
|
retval = new FormulaRecord(rectype, size, data);
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
default :
|
default :
|
||||||
retval = new UnknownRecord(rectype, size, data);
|
retval = new UnknownRecord(rectype, size, data);
|
||||||
|
@ -77,8 +77,12 @@ public class FormulaRecord
|
|||||||
extends Record
|
extends Record
|
||||||
implements CellValueRecordInterface, Comparable
|
implements CellValueRecordInterface, Comparable
|
||||||
{
|
{
|
||||||
|
|
||||||
|
public static final boolean EXPERIMENTAL_FORMULA_SUPPORT_ENABLED=false;
|
||||||
|
|
||||||
public static final short sid =
|
public static final short sid =
|
||||||
0x06; // docs say 406...because of a bug Microsoft support site article #Q184647)
|
0x06; // docs say 406...because of a bug Microsoft support site article #Q184647)
|
||||||
|
|
||||||
private short field_1_row;
|
private short field_1_row;
|
||||||
private short field_2_column;
|
private short field_2_column;
|
||||||
private short field_3_xf;
|
private short field_3_xf;
|
||||||
@ -87,6 +91,9 @@ public class FormulaRecord
|
|||||||
private int field_6_zero;
|
private int field_6_zero;
|
||||||
private short field_7_expression_len;
|
private short field_7_expression_len;
|
||||||
private Stack field_8_parsed_expr;
|
private Stack field_8_parsed_expr;
|
||||||
|
|
||||||
|
private byte[] all_data; //if formula support is not enabled then
|
||||||
|
//we'll just store/reserialize
|
||||||
|
|
||||||
/** Creates new FormulaRecord */
|
/** Creates new FormulaRecord */
|
||||||
|
|
||||||
@ -126,6 +133,7 @@ public class FormulaRecord
|
|||||||
|
|
||||||
protected void fillFields(byte [] data, short size, int offset)
|
protected void fillFields(byte [] data, short size, int offset)
|
||||||
{
|
{
|
||||||
|
if (EXPERIMENTAL_FORMULA_SUPPORT_ENABLED) {
|
||||||
field_1_row = LittleEndian.getShort(data, 0 + offset);
|
field_1_row = LittleEndian.getShort(data, 0 + offset);
|
||||||
field_2_column = LittleEndian.getShort(data, 2 + offset);
|
field_2_column = LittleEndian.getShort(data, 2 + offset);
|
||||||
field_3_xf = LittleEndian.getShort(data, 4 + offset);
|
field_3_xf = LittleEndian.getShort(data, 4 + offset);
|
||||||
@ -133,9 +141,16 @@ public class FormulaRecord
|
|||||||
field_5_options = LittleEndian.getShort(data, 14 + offset);
|
field_5_options = LittleEndian.getShort(data, 14 + offset);
|
||||||
field_6_zero = LittleEndian.getInt(data, 16 + offset);
|
field_6_zero = LittleEndian.getInt(data, 16 + offset);
|
||||||
field_7_expression_len = LittleEndian.getShort(data, 20 + offset);
|
field_7_expression_len = LittleEndian.getShort(data, 20 + offset);
|
||||||
|
field_8_parsed_expr = getParsedExpressionTokens(data, size,
|
||||||
|
offset);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
all_data = new byte[size+4];
|
||||||
|
LittleEndian.putShort(all_data,0,sid);
|
||||||
|
LittleEndian.putShort(all_data,2,size);
|
||||||
|
System.arraycopy(data,offset,all_data,4,size);
|
||||||
|
}
|
||||||
|
|
||||||
// field_8_parsed_expr = getParsedExpressionTokens(data, size,
|
|
||||||
// offset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Stack getParsedExpressionTokens(byte [] data, short size,
|
private Stack getParsedExpressionTokens(byte [] data, short size,
|
||||||
@ -332,6 +347,7 @@ public class FormulaRecord
|
|||||||
|
|
||||||
public int serialize(int offset, byte [] data)
|
public int serialize(int offset, byte [] data)
|
||||||
{
|
{
|
||||||
|
if (EXPERIMENTAL_FORMULA_SUPPORT_ENABLED) {
|
||||||
int ptgSize = getTotalPtgSize();
|
int ptgSize = getTotalPtgSize();
|
||||||
|
|
||||||
LittleEndian.putShort(data, 0 + offset, sid);
|
LittleEndian.putShort(data, 0 + offset, sid);
|
||||||
@ -343,6 +359,9 @@ public class FormulaRecord
|
|||||||
LittleEndian.putShort(data, 18 + offset, getOptions());
|
LittleEndian.putShort(data, 18 + offset, getOptions());
|
||||||
LittleEndian.putInt(data, 20 + offset, field_6_zero);
|
LittleEndian.putInt(data, 20 + offset, field_6_zero);
|
||||||
LittleEndian.putShort(data, 24 + offset, getExpressionLength());
|
LittleEndian.putShort(data, 24 + offset, getExpressionLength());
|
||||||
|
} else {
|
||||||
|
System.arraycopy(all_data,0,data,offset,all_data.length);
|
||||||
|
}
|
||||||
|
|
||||||
// serializePtgs(data, 26+offset);
|
// serializePtgs(data, 26+offset);
|
||||||
return getRecordSize();
|
return getRecordSize();
|
||||||
@ -350,7 +369,14 @@ public class FormulaRecord
|
|||||||
|
|
||||||
public int getRecordSize()
|
public int getRecordSize()
|
||||||
{
|
{
|
||||||
return 0;
|
int retval =0;
|
||||||
|
|
||||||
|
if (EXPERIMENTAL_FORMULA_SUPPORT_ENABLED) {
|
||||||
|
retval = getTotalPtgSize() + 28;
|
||||||
|
} else {
|
||||||
|
retval =all_data.length;
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
|
||||||
// return getTotalPtgSize() + 28;
|
// return getTotalPtgSize() + 28;
|
||||||
}
|
}
|
||||||
|
@ -77,33 +77,68 @@ import org.apache.poi.util.LittleEndian;
|
|||||||
public class RecordFactory
|
public class RecordFactory
|
||||||
{
|
{
|
||||||
private static int NUM_RECORDS = 10000;
|
private static int NUM_RECORDS = 10000;
|
||||||
private static final Class[] records = new Class[]
|
private static final Class[] records;
|
||||||
{
|
|
||||||
BOFRecord.class, InterfaceHdrRecord.class, MMSRecord.class,
|
static {
|
||||||
InterfaceEndRecord.class, WriteAccessRecord.class,
|
if (FormulaRecord.EXPERIMENTAL_FORMULA_SUPPORT_ENABLED) {
|
||||||
CodepageRecord.class, DSFRecord.class, TabIdRecord.class,
|
records = new Class[]
|
||||||
FnGroupCountRecord.class, WindowProtectRecord.class,
|
{
|
||||||
ProtectRecord.class, PasswordRecord.class, ProtectionRev4Record.class,
|
BOFRecord.class, InterfaceHdrRecord.class, MMSRecord.class,
|
||||||
PasswordRev4Record.class, WindowOneRecord.class, BackupRecord.class,
|
InterfaceEndRecord.class, WriteAccessRecord.class,
|
||||||
HideObjRecord.class, DateWindow1904Record.class,
|
CodepageRecord.class, DSFRecord.class, TabIdRecord.class,
|
||||||
PrecisionRecord.class, RefreshAllRecord.class, BookBoolRecord.class,
|
FnGroupCountRecord.class, WindowProtectRecord.class,
|
||||||
FontRecord.class, FormatRecord.class, ExtendedFormatRecord.class,
|
ProtectRecord.class, PasswordRecord.class, ProtectionRev4Record.class,
|
||||||
StyleRecord.class, UseSelFSRecord.class, BoundSheetRecord.class,
|
PasswordRev4Record.class, WindowOneRecord.class, BackupRecord.class,
|
||||||
CountryRecord.class, SSTRecord.class, ExtSSTRecord.class,
|
HideObjRecord.class, DateWindow1904Record.class,
|
||||||
EOFRecord.class, IndexRecord.class, CalcModeRecord.class,
|
PrecisionRecord.class, RefreshAllRecord.class, BookBoolRecord.class,
|
||||||
CalcCountRecord.class, RefModeRecord.class, IterationRecord.class,
|
FontRecord.class, FormatRecord.class, ExtendedFormatRecord.class,
|
||||||
DeltaRecord.class, SaveRecalcRecord.class, PrintHeadersRecord.class,
|
StyleRecord.class, UseSelFSRecord.class, BoundSheetRecord.class,
|
||||||
PrintGridlinesRecord.class, GridsetRecord.class, GutsRecord.class,
|
CountryRecord.class, SSTRecord.class, ExtSSTRecord.class,
|
||||||
DefaultRowHeightRecord.class, WSBoolRecord.class, HeaderRecord.class,
|
EOFRecord.class, IndexRecord.class, CalcModeRecord.class,
|
||||||
FooterRecord.class, HCenterRecord.class, VCenterRecord.class,
|
CalcCountRecord.class, RefModeRecord.class, IterationRecord.class,
|
||||||
PrintSetupRecord.class, DefaultColWidthRecord.class,
|
DeltaRecord.class, SaveRecalcRecord.class, PrintHeadersRecord.class,
|
||||||
DimensionsRecord.class, RowRecord.class, LabelSSTRecord.class,
|
PrintGridlinesRecord.class, GridsetRecord.class, GutsRecord.class,
|
||||||
RKRecord.class, NumberRecord.class, DBCellRecord.class,
|
DefaultRowHeightRecord.class, WSBoolRecord.class, HeaderRecord.class,
|
||||||
WindowTwoRecord.class, SelectionRecord.class, ContinueRecord.class,
|
FooterRecord.class, HCenterRecord.class, VCenterRecord.class,
|
||||||
LabelRecord.class, BlankRecord.class, ColumnInfoRecord.class,
|
PrintSetupRecord.class, DefaultColWidthRecord.class,
|
||||||
MulRKRecord.class, MulBlankRecord.class, MergeCellsRecord.class,
|
DimensionsRecord.class, RowRecord.class, LabelSSTRecord.class,
|
||||||
FormulaRecord.class, BoolErrRecord.class
|
RKRecord.class, NumberRecord.class, DBCellRecord.class,
|
||||||
};
|
WindowTwoRecord.class, SelectionRecord.class, ContinueRecord.class,
|
||||||
|
LabelRecord.class, BlankRecord.class, ColumnInfoRecord.class,
|
||||||
|
MulRKRecord.class, MulBlankRecord.class, MergeCellsRecord.class,
|
||||||
|
FormulaRecord.class, BoolErrRecord.class
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
records = new Class[]
|
||||||
|
{
|
||||||
|
BOFRecord.class, InterfaceHdrRecord.class, MMSRecord.class,
|
||||||
|
InterfaceEndRecord.class, WriteAccessRecord.class,
|
||||||
|
CodepageRecord.class, DSFRecord.class, TabIdRecord.class,
|
||||||
|
FnGroupCountRecord.class, WindowProtectRecord.class,
|
||||||
|
ProtectRecord.class, PasswordRecord.class, ProtectionRev4Record.class,
|
||||||
|
PasswordRev4Record.class, WindowOneRecord.class, BackupRecord.class,
|
||||||
|
HideObjRecord.class, DateWindow1904Record.class,
|
||||||
|
PrecisionRecord.class, RefreshAllRecord.class, BookBoolRecord.class,
|
||||||
|
FontRecord.class, FormatRecord.class, ExtendedFormatRecord.class,
|
||||||
|
StyleRecord.class, UseSelFSRecord.class, BoundSheetRecord.class,
|
||||||
|
CountryRecord.class, SSTRecord.class, ExtSSTRecord.class,
|
||||||
|
EOFRecord.class, IndexRecord.class, CalcModeRecord.class,
|
||||||
|
CalcCountRecord.class, RefModeRecord.class, IterationRecord.class,
|
||||||
|
DeltaRecord.class, SaveRecalcRecord.class, PrintHeadersRecord.class,
|
||||||
|
PrintGridlinesRecord.class, GridsetRecord.class, GutsRecord.class,
|
||||||
|
DefaultRowHeightRecord.class, WSBoolRecord.class, HeaderRecord.class,
|
||||||
|
FooterRecord.class, HCenterRecord.class, VCenterRecord.class,
|
||||||
|
PrintSetupRecord.class, DefaultColWidthRecord.class,
|
||||||
|
DimensionsRecord.class, RowRecord.class, LabelSSTRecord.class,
|
||||||
|
RKRecord.class, NumberRecord.class, DBCellRecord.class,
|
||||||
|
WindowTwoRecord.class, SelectionRecord.class, ContinueRecord.class,
|
||||||
|
LabelRecord.class, BlankRecord.class, ColumnInfoRecord.class,
|
||||||
|
MulRKRecord.class, MulBlankRecord.class, MergeCellsRecord.class,
|
||||||
|
BoolErrRecord.class
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
private static Map recordsMap = recordsToMap(records);
|
private static Map recordsMap = recordsToMap(records);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user