## 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), Jason Height (jheight at chariot dot net dot au)
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
`java.lang.Object` `clone()`
`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
`int` `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(int 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
`equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

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(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.

  Specified by:
    `validateSid` in class `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.

  Specified by:
    `fillFields` in class `Record`
  Parameters:
    `data` - raw data
    `size` - size of data
    `offset` - of the record's data (provided a big array of the file)

### getRow

    public int getRow()

  Description copied from interface: `CellValueRecordInterface`
  get the row this cell occurs on

  Specified by:
    `getRow` in interface `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`
  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:
    0. RK_IEEE_NUMBER
    1. RK_IEEE_NUMBER_TIMES_100
    2. RK_INTEGER
    3. 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.

  Specified by:
    `serialize` in class `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.

  Specified by:
    `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`
  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`
  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`
  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`
  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 interface `CellValueRecordInterface`
  Parameters:
    `row` - the row this cell occurs within

### setXFIndex

    public void setXFIndex(short xf)

  NO OP!

  Specified by:
    `setXFIndex` in interface `CellValueRecordInterface`

### clone

    public java.lang.Object clone()

  Specified by:
    `clone` in interface `CellValueRecordInterface`
  Overrides:
    `clone` in class `Record`

Copyright © 2003 Apache Software Foundation.