jxl.write.biff.MulRKRecord Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jxl Show documentation
Show all versions of jxl Show documentation
JExcelApi is a java library which provides the ability to read, write, and modify Microsoft Excel spreadsheets.
The newest version!
/*********************************************************************
*
* Copyright (C) 2002 Andrew Khan
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
***************************************************************************/
package jxl.write.biff;
import java.util.List;
import jxl.biff.IntegerHelper;
import jxl.biff.Type;
import jxl.biff.WritableRecordData;
import jxl.write.Number;
/**
* Contains an array of RK numbers
*/
class MulRKRecord extends WritableRecordData
{
/**
* The row containing these numbers
*/
private int row;
/**
* The first column these rk number occur on
*/
private int colFirst;
/**
* The last column these rk number occur on
*/
private int colLast;
/**
* The array of rk numbers
*/
private int[] rknumbers;
/**
* The array of xf indices
*/
private int[] xfIndices;
/**
* Constructs the rk numbers from the integer cells
*
* @param numbers A list of jxl.write.Number objects
*/
public MulRKRecord(List numbers)
{
super(Type.MULRK);
row = ((Number)numbers.get(0)).getRow();
colFirst = ((Number)numbers.get(0)).getColumn();
colLast = colFirst + numbers.size() - 1;
rknumbers = new int[numbers.size()];
xfIndices = new int[numbers.size()];
for (int i = 0; i < numbers.size(); i++)
{
rknumbers[i] = (int) ((Number)numbers.get(i)).getValue();
xfIndices[i] = ( (CellValue) numbers.get(i)).getXFIndex();
}
}
/**
* Gets the binary data for output to file
*
* @return the binary data
*/
public byte[] getData()
{
byte[] data = new byte[rknumbers.length * 6 + 6];
// Set up the row and the first column
IntegerHelper.getTwoBytes(row, data, 0);
IntegerHelper.getTwoBytes(colFirst, data, 2);
// Add all the rk numbers
int pos = 4;
int rkValue = 0;
byte[] rkBytes = new byte[4];
for (int i = 0; i < rknumbers.length; i++)
{
IntegerHelper.getTwoBytes(xfIndices[i], data, pos);
// To represent an int as an Excel RK value, we have to
// undergo some outrageous jiggery pokery, as follows:
// Gets the bit representation of the number
rkValue = rknumbers[i] << 2;
// Set the integer bit
rkValue |= 0x2;
IntegerHelper.getFourBytes(rkValue, data, pos+2);
pos+=6;
}
// Write the number of rk numbers in this record
IntegerHelper.getTwoBytes(colLast, data, pos);
return data;
}
}