org.apache.poi.hssf.record
Class RKRecord

java.lang.Object
  |
  +--org.apache.poi.hssf.record.Record
        |
        +--org.apache.poi.hssf.record.RKRecord
All Implemented Interfaces:
CellValueRecordInterface

public class RKRecord
extends Record
implements CellValueRecordInterface

Title: RK Record Description: An internal 32 bit number with the two most significant bits storing the type. This is part of a bizarre scheme to save disk space and memory (gee look at all the other whole records that are in the file just "cause"..,far better to waste processor cycles on this then leave on of those "valuable" records out).

We support this in READ-ONLY mode. HSSF converts these to NUMBER records

REFERENCE: PG 376 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)

Version:
2.0-pre
Author:
Andrew C. Oliver (acoliver at apache dot org)
See Also:
NumberRecord

Field Summary
static short RK_IEEE_NUMBER
           
static short RK_IEEE_NUMBER_TIMES_100
           
static short RK_INTEGER
           
static short RK_INTEGER_TIMES_100
           
static short sid
           
 
Constructor Summary
RKRecord()
           
RKRecord(short id, short size, byte[] data)
          Constructs a RK record and sets its fields appropriately.
RKRecord(short id, short size, byte[] data, int offset)
          Constructs a RK record and sets its fields appropriately.
 
Method Summary
protected  void fillFields(byte[] data, short size, int offset)
          called by the constructor, should set class level fields.
 short getColumn()
          get the column this cell defines within the row
 int getRKField()
           
 double getRKNumber()
          Extract the value of the number
 short getRKType()
          Get the type of the number
 short getRow()
          get the row this cell occurs on
 short getSid()
          return the non static version of the id for this record.
 short getXFIndex()
           
 boolean isAfter(CellValueRecordInterface i)
          returns whether this cell is after the passed in cell
 boolean isBefore(CellValueRecordInterface i)
          returns whether this cell is before the passed in cell
 boolean isEqual(CellValueRecordInterface i)
          returns whether this cell represents the same cell (NOT VALUE)
 boolean isInValueSection()
          DBCELL, ROW, VALUES all say yes
 boolean isValue()
          tells whether this type of record contains a value
static void main(java.lang.String[] ignored_args)
          Debugging main()
 int serialize(int offset, byte[] data)
          called by the class that is responsible for writing this sucker.
 void setColumn(short col)
          set the column this cell defines within the row
 void setRow(short row)
          set the row this cell occurs on
 void setXFIndex(short xf)
          NO OP!
 java.lang.String toString()
          get a string representation of the record (for biffview/debugging)
protected  void validateSid(short id)
          called by constructor, should throw runtime exception in the event of a record passed with a differing ID.
 
Methods inherited from class org.apache.poi.hssf.record.Record
fillFields, getRecordSize, processContinueRecord, serialize
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

sid

public static final short sid

RK_IEEE_NUMBER

public static final short RK_IEEE_NUMBER

RK_IEEE_NUMBER_TIMES_100

public static final short RK_IEEE_NUMBER_TIMES_100

RK_INTEGER

public static final short RK_INTEGER

RK_INTEGER_TIMES_100

public static final short RK_INTEGER_TIMES_100
Constructor Detail

RKRecord

public RKRecord()

RKRecord

public RKRecord(short id,
                short size,
                byte[] data)
Constructs a RK record and sets its fields appropriately.
Parameters:
id - id must be 0x27e or an exception will be throw upon validation
size - the size of the data area of the record
data - data of the record (should not contain sid/len)

RKRecord

public RKRecord(short id,
                short size,
                byte[] data,
                int offset)
Constructs a RK record and sets its fields appropriately.
Parameters:
id - id must be 0x27e or an exception will be throw upon validation
size - the size of the data area of the record
data - data of the record (should not contain sid/len)
offset - of the data
Method Detail

validateSid

protected void validateSid(short id)
Description copied from class: Record
called by constructor, should throw runtime exception in the event of a record passed with a differing ID.
Overrides:
validateSid in class Record
Following copied from class: org.apache.poi.hssf.record.Record
Parameters:
id - alleged id for this record

fillFields

protected void fillFields(byte[] data,
                          short size,
                          int offset)
Description copied from class: Record
called by the constructor, should set class level fields. Should throw runtime exception for bad/icomplete data.
Overrides:
fillFields in class Record
Following copied from class: org.apache.poi.hssf.record.Record
Parameters:
data - raw data
size - size of data
offset - of the record's data (provided a big array of the file)

getRow

public short getRow()
Description copied from interface: CellValueRecordInterface
get the row this cell occurs on
Specified by:
getRow in interface CellValueRecordInterface
Following copied from interface: org.apache.poi.hssf.record.CellValueRecordInterface
Returns:
the row

getColumn

public short getColumn()
Description copied from interface: CellValueRecordInterface
get the column this cell defines within the row
Specified by:
getColumn in interface CellValueRecordInterface
Following copied from interface: org.apache.poi.hssf.record.CellValueRecordInterface
Returns:
the column

getXFIndex

public short getXFIndex()
Specified by:
getXFIndex in interface CellValueRecordInterface

getRKField

public int getRKField()

getRKType

public short getRKType()
Get the type of the number
Returns:
one of these values:
  1. RK_IEEE_NUMBER
  2. RK_IEEE_NUMBER_TIMES_100
  3. RK_INTEGER
  4. RK_INTEGER_TIMES_100

getRKNumber

public double getRKNumber()
Extract the value of the number

The mechanism for determining the value is dependent on the two low order bits of the raw number. If bit 1 is set, the number is an integer and can be cast directly as a double, otherwise, it's apparently the exponent and mantissa of a double (and the remaining low-order bits of the double's mantissa are 0's).

If bit 0 is set, the result of the conversion to a double is divided by 100; otherwise, the value is left alone.

[insert picture of Screwy Squirrel in full Napoleonic regalia]

Returns:
the value as a proper double (hey, it could happen)

toString

public java.lang.String toString()
Description copied from class: Record
get a string representation of the record (for biffview/debugging)
Overrides:
toString in class Record

serialize

public int serialize(int offset,
                     byte[] data)
Description copied from class: Record
called by the class that is responsible for writing this sucker. Subclasses should implement this so that their data is passed back in a byte array.
Overrides:
serialize in class Record
Following copied from class: org.apache.poi.hssf.record.Record
Parameters:
offset - to begin writing at
data - byte array containing instance data
Returns:
number of bytes written

main

public static void main(java.lang.String[] ignored_args)
Debugging main()

Normally I'd do this in a junit test, but let's face it -- once this algorithm has been tested and it works, we are never ever going to change it. This is driven by the Faceless Enemy's minions, who dare not change the algorithm out from under us.

Parameters:
ignored_args - command line arguments, which we blithely ignore

getSid

public short getSid()
Description copied from class: Record
return the non static version of the id for this record.
Overrides:
getSid in class Record

isBefore

public boolean isBefore(CellValueRecordInterface i)
Description copied from interface: CellValueRecordInterface
returns whether this cell is before the passed in cell
Specified by:
isBefore in interface CellValueRecordInterface
Following copied from interface: org.apache.poi.hssf.record.CellValueRecordInterface
Parameters:
i - another cell interface record to compare
Returns:
true if the cells is before, or false if not

isAfter

public boolean isAfter(CellValueRecordInterface i)
Description copied from interface: CellValueRecordInterface
returns whether this cell is after the passed in cell
Specified by:
isAfter in interface CellValueRecordInterface
Following copied from interface: org.apache.poi.hssf.record.CellValueRecordInterface
Parameters:
i - record to compare
Returns:
true if the cell is after, false if not

isEqual

public boolean isEqual(CellValueRecordInterface i)
Description copied from interface: CellValueRecordInterface
returns whether this cell represents the same cell (NOT VALUE)
Specified by:
isEqual in interface CellValueRecordInterface
Following copied from interface: org.apache.poi.hssf.record.CellValueRecordInterface
Parameters:
i - record to compare
Returns:
true if the cells are the same cell (positionally), false if not.

isInValueSection

public boolean isInValueSection()
Description copied from class: Record
DBCELL, ROW, VALUES all say yes
Overrides:
isInValueSection in class Record

isValue

public boolean isValue()
Description copied from class: Record
tells whether this type of record contains a value
Overrides:
isValue in class Record

setColumn

public void setColumn(short col)
Description copied from interface: CellValueRecordInterface
set the column this cell defines within the row
Specified by:
setColumn in interface CellValueRecordInterface
Following copied from interface: org.apache.poi.hssf.record.CellValueRecordInterface
Parameters:
col - the column this cell defines

setRow

public void setRow(short row)
Description copied from interface: CellValueRecordInterface
set the row this cell occurs on
Specified by:
setRow in interface CellValueRecordInterface
Following copied from interface: org.apache.poi.hssf.record.CellValueRecordInterface
Parameters:
row - the row this cell occurs within

setXFIndex

public void setXFIndex(short xf)
NO OP!
Specified by:
setXFIndex in interface CellValueRecordInterface


Copyright © 2002 Apache jakarta-poi project. All Rights Reserved.