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:
  • Field Details

  • Constructor Details

    • 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 Details

    • 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(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 class Record
      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 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:
      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 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(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 Object clone()
      Specified by:
      clone in interface CellValueRecordInterface
      Overrides:
      clone in class Record