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;
/**
/** 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;
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();
}
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;
}
}
+++ /dev/null
-/* ====================================================================
- 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;
- }
-}
\ No newline at end of file
/**
* 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)
+++ /dev/null
-/* ====================================================================
-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 java.io.ByteArrayOutputStream;
-
-import org.apache.poi.hssf.record.TestcaseRecordInputStream;
-import org.apache.poi.util.LittleEndianOutputStream;
-
-import junit.framework.TestCase;
-
-public final class TestRef8U extends TestCase {
- byte[] data = new byte[] {
- (byte)0x02,(byte)0x00,
- (byte)0x04,(byte)0x00,
- (byte)0x00,(byte)0x00,
- (byte)0x03,(byte)0x00,
- };
-
- public void testLoad() {
- Ref8U ref = new Ref8U(
- TestcaseRecordInputStream.create(0x000, data)
- );
- assertEquals(2, ref.getFirstRow());
- assertEquals(4, ref.getLastRow());
- assertEquals(0, ref.getFirstCol());
- assertEquals(3, ref.getLastCol());
-
- assertEquals( 8, Ref8U.getDataSize() );
- }
-
- public void testStore()
- {
- Ref8U ref = new Ref8U();
-
- byte[] recordBytes;
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- LittleEndianOutputStream out = new LittleEndianOutputStream(baos);
-
- // With nothing set
- ref.serialize(out);
- recordBytes = baos.toByteArray();
- assertEquals(recordBytes.length, data.length);
- for (int i = 0; i < data.length; i++) {
- assertEquals("At offset " + i, 0, recordBytes[i]);
- }
-
- // Now set the flags
- ref.setFirstRow((short)2);
- ref.setLastRow((short)4);
- ref.setFirstCol((short)0);
- ref.setLastCol((short)3);
-
- // Re-test
- baos.reset();
- ref.serialize(out);
- recordBytes = baos.toByteArray();
-
- assertEquals(recordBytes.length, data.length);
- for (int i = 0; i < data.length; i++) {
- assertEquals("At offset " + i, data[i], recordBytes[i]);
- }
- }
-}
--- /dev/null
+/* ====================================================================
+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.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 TestCellRangeAddress extends TestCase {
+ byte[] data = new byte[] {
+ (byte)0x02,(byte)0x00,
+ (byte)0x04,(byte)0x00,
+ (byte)0x00,(byte)0x00,
+ (byte)0x03,(byte)0x00,
+ };
+
+ public void testLoad() {
+ CellRangeAddress ref = new CellRangeAddress(
+ TestcaseRecordInputStream.create(0x000, data)
+ );
+ assertEquals(2, ref.getFirstRow());
+ assertEquals(4, ref.getLastRow());
+ assertEquals(0, ref.getFirstColumn());
+ assertEquals(3, ref.getLastColumn());
+
+ assertEquals( 8, CellRangeAddress.ENCODED_SIZE );
+ }
+
+ public void testStore()
+ {
+ CellRangeAddress ref = new CellRangeAddress(0,0,0,0);
+
+ byte[] recordBytes;
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ LittleEndianOutputStream out = new LittleEndianOutputStream(baos);
+
+ // With nothing set
+ ref.serialize(out);
+ recordBytes = baos.toByteArray();
+ assertEquals(recordBytes.length, data.length);
+ for (int i = 0; i < data.length; i++) {
+ assertEquals("At offset " + i, 0, recordBytes[i]);
+ }
+
+ // Now set the flags
+ ref.setFirstRow((short)2);
+ ref.setLastRow((short)4);
+ ref.setFirstColumn((short)0);
+ ref.setLastColumn((short)3);
+
+ // Re-test
+ baos.reset();
+ ref.serialize(out);
+ recordBytes = baos.toByteArray();
+
+ assertEquals(recordBytes.length, data.length);
+ for (int i = 0; i < data.length; i++) {
+ assertEquals("At offset " + i, data[i], recordBytes[i]);
+ }
+ }
+}