acoliver 02/04/17 15:21:17
Modified: src/java/org/apache/poi/hssf/dev BiffViewer.java
src/java/org/apache/poi/hssf/record FormulaRecord.java
RecordFactory.java
Log:
Formula changes. . Disable for 1.5...alow compile in if desired.
Revision Changes Path
1.12 +5 -0 jakarta-poi/src/java/org/apache/poi/hssf/dev/BiffViewer.java
Index: BiffViewer.java
===================================================================
RCS file: /home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/dev/BiffViewer.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- BiffViewer.java 14 Apr 2002 13:54:00 -0000 1.11
+++ BiffViewer.java 17 Apr 2002 22:21:16 -0000 1.12
@@ -630,6 +630,11 @@
case LinkedDataRecord.sid:
retval = new LinkedDataRecord(rectype, size, data);
break;
+
+ case FormulaRecord.sid:
+ retval = new FormulaRecord(rectype, size, data);
+ break;
+
default :
retval = new UnknownRecord(rectype, size, data);
1.4 +29 -3
jakarta-poi/src/java/org/apache/poi/hssf/record/FormulaRecord.java
Index: FormulaRecord.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/FormulaRecord.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- FormulaRecord.java 11 Feb 2002 10:45:50 -0000 1.3
+++ FormulaRecord.java 17 Apr 2002 22:21:16 -0000 1.4
@@ -77,8 +77,12 @@
extends Record
implements CellValueRecordInterface, Comparable
{
+
+ public static final boolean EXPERIMENTAL_FORMULA_SUPPORT_ENABLED=false;
+
public static final short sid =
0x06; // docs say 406...because of a bug Microsoft support site article
#Q184647)
+
private short field_1_row;
private short field_2_column;
private short field_3_xf;
@@ -87,6 +91,9 @@
private int field_6_zero;
private short field_7_expression_len;
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 */
@@ -126,6 +133,7 @@
protected void fillFields(byte [] data, short size, int offset)
{
+ if (EXPERIMENTAL_FORMULA_SUPPORT_ENABLED) {
field_1_row = LittleEndian.getShort(data, 0 + offset);
field_2_column = LittleEndian.getShort(data, 2 + offset);
field_3_xf = LittleEndian.getShort(data, 4 + offset);
@@ -133,9 +141,16 @@
field_5_options = LittleEndian.getShort(data, 14 + offset);
field_6_zero = LittleEndian.getInt(data, 16 + 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,
@@ -332,6 +347,7 @@
public int serialize(int offset, byte [] data)
{
+ if (EXPERIMENTAL_FORMULA_SUPPORT_ENABLED) {
int ptgSize = getTotalPtgSize();
LittleEndian.putShort(data, 0 + offset, sid);
@@ -343,6 +359,9 @@
LittleEndian.putShort(data, 18 + offset, getOptions());
LittleEndian.putInt(data, 20 + offset, field_6_zero);
LittleEndian.putShort(data, 24 + offset, getExpressionLength());
+ } else {
+ System.arraycopy(all_data,0,data,offset,all_data.length);
+ }
// serializePtgs(data, 26+offset);
return getRecordSize();
@@ -350,7 +369,14 @@
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;
}
1.6 +62 -27
jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java
Index: RecordFactory.java
===================================================================
RCS file:
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/RecordFactory.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- RecordFactory.java 10 Apr 2002 12:48:00 -0000 1.5
+++ RecordFactory.java 17 Apr 2002 22:21:16 -0000 1.6
@@ -77,33 +77,68 @@
public class RecordFactory
{
private static int NUM_RECORDS = 10000;
- private static final Class[] 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,
- FormulaRecord.class, BoolErrRecord.class
- };
+ private static final Class[] records;
+
+ static {
+ if (FormulaRecord.EXPERIMENTAL_FORMULA_SUPPORT_ENABLED) {
+ 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,
+ 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);
/**