jxl.write.biff.DBCellRecord 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.ArrayList;
import java.util.Iterator;
import jxl.biff.IntegerHelper;
import jxl.biff.Type;
import jxl.biff.WritableRecordData;
/**
* Indexes the first row record of the block and each individual cell.
* This is invoked by the sheets write process
*/
class DBCellRecord extends WritableRecordData
{
/**
* The file position of the first Row record in this block
*/
private int rowPos;
/**
* The position of the start of the next cell after the first row. This
* is used as the offset for the cell positions
*/
private int cellOffset;
/**
* The list of all cell positions in this block
*/
private ArrayList cellRowPositions;
/**
* The position of this record in the file. Vital for calculating offsets
*/
private int position;
/**
* Constructor
*
* @param rp the position of this row
*/
public DBCellRecord(int rp)
{
super(Type.DBCELL);
rowPos = rp;
cellRowPositions = new ArrayList(10);
}
/**
* Sets the offset of this cell record within the sheet stream
*
* @param pos the offset
*/
void setCellOffset(int pos)
{
cellOffset = pos;
}
/**
* Adds a cell
*
* @param pos
*/
void addCellRowPosition(int pos)
{
cellRowPositions.add(new Integer(pos));
}
/**
* Sets the position of this cell within the sheet stream
*
* @param pos the position
*/
void setPosition(int pos)
{
position = pos;
}
/**
* Gets the binary data for this cell record
*
* @return the binary data
*/
protected byte[] getData()
{
byte[] data = new byte[4 + 2 * cellRowPositions.size()];
// Set the offset to the first row
IntegerHelper.getFourBytes(position - rowPos, data, 0);
// Now add in all the cell offsets
int pos = 4;
int lastCellPos = cellOffset;
Iterator i = cellRowPositions.iterator();
while (i.hasNext())
{
int cellPos = ((Integer) i.next()).intValue();
IntegerHelper.getTwoBytes(cellPos - lastCellPos, data, pos);
lastCellPos = cellPos;
pos += 2;
}
return data;
}
}