Looks like we already had Ref8U but with a different name... Switch to using CellRangeAddress instead!

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@894078 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2009-12-27 16:46:38 +00:00
parent 869fc4e5a6
commit 1186abb3b4
4 changed files with 20 additions and 106 deletions

View File

@ -18,7 +18,7 @@
package org.apache.poi.hssf.record;
import org.apache.poi.hssf.record.common.FtrHeader;
import org.apache.poi.hssf.record.common.Ref8U;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.LittleEndianOutput;
/**
@ -41,7 +41,7 @@ public final class FeatRecord extends StandardRecord {
/** Only matters if type is ISFFEC2 */
private long cbFeatData;
private int reserved3; // Should always be zero
private Ref8U[] cellRefs;
private CellRangeAddress[] cellRefs;
private byte[] rgbFeat;
@ -64,9 +64,9 @@ public final class FeatRecord extends StandardRecord {
cbFeatData = in.readInt();
reserved3 = in.readShort();
cellRefs = new Ref8U[cref];
cellRefs = new CellRangeAddress[cref];
for(int i=0; i<cellRefs.length; i++) {
cellRefs[i] = new Ref8U(in);
cellRefs[i] = new CellRangeAddress(in);
}
rgbFeat = in.readRemainder();
@ -100,6 +100,8 @@ public final class FeatRecord extends StandardRecord {
}
protected int getDataSize() {
return 12 + 2+1+4+2+4+2+Ref8U.getDataSize()+rgbFeat.length;
return 12 + 2+1+4+2+4+2+
(cellRefs.length * CellRangeAddress.ENCODED_SIZE)
+rgbFeat.length;
}
}

View File

@ -1,92 +0,0 @@
/* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==================================================================== */
package org.apache.poi.hssf.record.common;
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.util.LittleEndianOutput;
/**
* Title: Ref8U (Cell Range) common record part
* <P>
* This record part specifies common way of encoding a
* block of cells via first-last row-column.
*/
public final class Ref8U {
private short firstRow; // zero-based
private short lastRow; // zero-based
private short firstCol; // zero-based
private short lastCol; // zero-based
public Ref8U() {
}
public Ref8U(RecordInputStream in) {
firstRow = in.readShort();
lastRow = in.readShort();
firstCol = in.readShort();
lastCol = in.readShort();
}
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append(" [CELL RANGE]\n");
buffer.append(" Rows " + firstRow + " to " + lastRow);
buffer.append(" Cols " + firstCol + " to " + lastCol);
buffer.append(" [/CELL RANGE]\n");
return buffer.toString();
}
public void serialize(LittleEndianOutput out) {
out.writeShort(firstRow);
out.writeShort(lastRow);
out.writeShort(firstCol);
out.writeShort(lastCol);
}
public static int getDataSize() {
return 8;
}
public short getFirstRow() {
return firstRow;
}
public void setFirstRow(short firstRow) {
this.firstRow = firstRow;
}
public short getLastRow() {
return lastRow;
}
public void setLastRow(short lastRow) {
this.lastRow = lastRow;
}
public short getFirstCol() {
return firstCol;
}
public void setFirstCol(short firstCol) {
this.firstCol = firstCol;
}
public short getLastCol() {
return lastCol;
}
public void setLastCol(short lastCol) {
this.lastCol = lastCol;
}
}

View File

@ -24,6 +24,9 @@ import org.apache.poi.util.LittleEndianOutput;
/**
* See OOO documentation: excelfileformat.pdf sec 2.5.14 - 'Cell Range Address'<p/>
*
* <p>In the Microsoft documentation, this is also known as a
* Ref8U - see page 831 of version 1.0 of the documentation.
*
* Note - {@link SelectionRecord} uses the BIFF5 version of this structure
* @author Dragos Buleandra (dragos.buleandra@trade2b.ro)

View File

@ -15,16 +15,17 @@ See the License for the specific language governing permissions and
limitations under the License.
==================================================================== */
package org.apache.poi.hssf.record.common;
package org.apache.poi.ss.util;
import java.io.ByteArrayOutputStream;
import org.apache.poi.hssf.record.TestcaseRecordInputStream;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.LittleEndianOutputStream;
import junit.framework.TestCase;
public final class TestRef8U extends TestCase {
public final class TestCellRangeAddress extends TestCase {
byte[] data = new byte[] {
(byte)0x02,(byte)0x00,
(byte)0x04,(byte)0x00,
@ -33,20 +34,20 @@ public final class TestRef8U extends TestCase {
};
public void testLoad() {
Ref8U ref = new Ref8U(
CellRangeAddress ref = new CellRangeAddress(
TestcaseRecordInputStream.create(0x000, data)
);
assertEquals(2, ref.getFirstRow());
assertEquals(4, ref.getLastRow());
assertEquals(0, ref.getFirstCol());
assertEquals(3, ref.getLastCol());
assertEquals(0, ref.getFirstColumn());
assertEquals(3, ref.getLastColumn());
assertEquals( 8, Ref8U.getDataSize() );
assertEquals( 8, CellRangeAddress.ENCODED_SIZE );
}
public void testStore()
{
Ref8U ref = new Ref8U();
CellRangeAddress ref = new CellRangeAddress(0,0,0,0);
byte[] recordBytes;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
@ -63,8 +64,8 @@ public final class TestRef8U extends TestCase {
// Now set the flags
ref.setFirstRow((short)2);
ref.setLastRow((short)4);
ref.setFirstCol((short)0);
ref.setLastCol((short)3);
ref.setFirstColumn((short)0);
ref.setLastColumn((short)3);
// Re-test
baos.reset();