Class RKRecord
- java.lang.Object
-
- loci.poi.hssf.record.Record
-
- loci.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), Jason Height (jheight at chariot dot net dot au)
- See Also:
NumberRecord
-
-
Field Summary
Fields Modifier and Type Field Description 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
Constructors Constructor Description RKRecord()
RKRecord(RecordInputStream in)
Constructs a RK record and sets its fields appropriately.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Object
clone()
protected void
fillFields(RecordInputStream in)
called by the constructor, should set class level fields.short
getColumn()
get the column this cell defines within the rowint
getRKField()
double
getRKNumber()
Extract the value of the numbershort
getRKType()
Get the type of the numberint
getRow()
get the row this cell occurs onshort
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 cellboolean
isBefore(CellValueRecordInterface i)
returns whether this cell is before the passed in cellboolean
isEqual(CellValueRecordInterface i)
returns whether this cell represents the same cell (NOT VALUE)boolean
isInValueSection()
DBCELL, ROW, VALUES all say yesboolean
isValue()
tells whether this type of record contains a valuestatic void
main(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 rowvoid
setRow(int row)
set the row this cell occurs onvoid
setXFIndex(short xf)
NO OP!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 loci.poi.hssf.record.Record
getRecordSize, serialize
-
-
-
-
Field Detail
-
sid
public static final short sid
- See Also:
- Constant Field Values
-
RK_IEEE_NUMBER
public static final short RK_IEEE_NUMBER
- See Also:
- Constant Field Values
-
RK_IEEE_NUMBER_TIMES_100
public static final short RK_IEEE_NUMBER_TIMES_100
- See Also:
- Constant Field Values
-
RK_INTEGER
public static final short RK_INTEGER
- See Also:
- Constant Field Values
-
RK_INTEGER_TIMES_100
public static final short RK_INTEGER_TIMES_100
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
RKRecord
public RKRecord()
-
RKRecord
public RKRecord(RecordInputStream in)
Constructs a RK record and sets its fields appropriately.- Parameters:
in
- the RecordInputstream to read the record from
-
-
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.- Specified by:
validateSid
in classRecord
- Parameters:
id
- alleged id for this record
-
fillFields
protected void fillFields(RecordInputStream in)
Description copied from class:Record
called by the constructor, should set class level fields. Should throw runtime exception for bad/icomplete data.- Specified by:
fillFields
in classRecord
- Parameters:
in
- the RecordInputstream to read the record from
-
getRow
public int getRow()
Description copied from interface:CellValueRecordInterface
get the row this cell occurs on- Specified by:
getRow
in interfaceCellValueRecordInterface
- 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 interfaceCellValueRecordInterface
- Returns:
- the column
-
getXFIndex
public short getXFIndex()
- Specified by:
getXFIndex
in interfaceCellValueRecordInterface
-
getRKField
public int getRKField()
-
getRKType
public short getRKType()
Get the type of the number- Returns:
- one of these values:
- RK_IEEE_NUMBER
- RK_IEEE_NUMBER_TIMES_100
- RK_INTEGER
- RK_INTEGER_TIMES_100
-
getRKNumber
public double getRKNumber()
Extract the value of the numberThe 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 String toString()
Description copied from class:Record
get a string representation of the record (for biffview/debugging)
-
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.
-
main
public static void main(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.
-
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 interfaceCellValueRecordInterface
- 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 interfaceCellValueRecordInterface
- 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 interfaceCellValueRecordInterface
- 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 classRecord
-
isValue
public boolean isValue()
Description copied from class:Record
tells whether this type of record contains a value
-
setColumn
public void setColumn(short col)
Description copied from interface:CellValueRecordInterface
set the column this cell defines within the row- Specified by:
setColumn
in interfaceCellValueRecordInterface
- Parameters:
col
- the column this cell defines
-
setRow
public void setRow(int row)
Description copied from interface:CellValueRecordInterface
set the row this cell occurs on- Specified by:
setRow
in interfaceCellValueRecordInterface
- Parameters:
row
- the row this cell occurs within
-
setXFIndex
public void setXFIndex(short xf)
NO OP!- Specified by:
setXFIndex
in interfaceCellValueRecordInterface
-
clone
public Object clone()
- Specified by:
clone
in interfaceCellValueRecordInterface
- Overrides:
clone
in classRecord
-
-