Improving AreaI interface and AreaPtg hierarchy
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@690825 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
38461f88a9
commit
f9123d1acf
@ -626,7 +626,7 @@ public final class NameRecord extends Record {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Ptg createNewPtg(){
|
private Ptg createNewPtg(){
|
||||||
Ptg ptg = new Area3DPtg();
|
Ptg ptg = new Area3DPtg("A1", 0); // TODO - change to not be partially initialised
|
||||||
field_13_name_definition.push(ptg);
|
field_13_name_definition.push(ptg);
|
||||||
|
|
||||||
return ptg;
|
return ptg;
|
||||||
@ -673,9 +673,7 @@ public final class NameRecord extends Record {
|
|||||||
|
|
||||||
// Add the area reference(s)
|
// Add the area reference(s)
|
||||||
for(int i=0; i<refs.length; i++) {
|
for(int i=0; i<refs.length; i++) {
|
||||||
ptg = new Area3DPtg();
|
ptg = new Area3DPtg(refs[i].formatAsString(), externSheetIndex);
|
||||||
((Area3DPtg) ptg).setExternSheetIndex(externSheetIndex);
|
|
||||||
((Area3DPtg) ptg).setArea(refs[i].formatAsString());
|
|
||||||
field_13_name_definition.push(ptg);
|
field_13_name_definition.push(ptg);
|
||||||
this.setDefinitionTextLength( (short)(getDefinitionLength() + ptg.getSize()) );
|
this.setDefinitionTextLength( (short)(getDefinitionLength() + ptg.getSize()) );
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
/* ====================================================================
|
||||||
|
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.formula;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Common superclass of 2-D area refs
|
||||||
|
*/
|
||||||
|
public abstract class Area2DPtgBase extends AreaPtgBase {
|
||||||
|
private final static int SIZE = 9;
|
||||||
|
|
||||||
|
protected Area2DPtgBase(int firstRow, int lastRow, int firstColumn, int lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {
|
||||||
|
super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative);
|
||||||
|
}
|
||||||
|
protected Area2DPtgBase(RecordInputStream in) {
|
||||||
|
readCoordinates(in);
|
||||||
|
}
|
||||||
|
protected abstract byte getSid();
|
||||||
|
|
||||||
|
public final void writeBytes(byte [] array, int offset) {
|
||||||
|
LittleEndian.putByte(array, offset+0, getSid() + getPtgClass());
|
||||||
|
writeCoordinates(array, offset+1);
|
||||||
|
}
|
||||||
|
public Area2DPtgBase(String arearef) {
|
||||||
|
super(arearef);
|
||||||
|
}
|
||||||
|
public final int getSize() {
|
||||||
|
return SIZE;
|
||||||
|
}
|
||||||
|
public final String toFormulaString(HSSFWorkbook book) {
|
||||||
|
return formatReferenceAsString();
|
||||||
|
}
|
||||||
|
public final String toString() {
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
sb.append(getClass().getName());
|
||||||
|
sb.append(" [");
|
||||||
|
sb.append(formatReferenceAsString());
|
||||||
|
sb.append("]");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
@ -17,12 +17,8 @@
|
|||||||
|
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
import org.apache.poi.hssf.util.AreaReference;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
import org.apache.poi.hssf.util.CellReference;
|
|
||||||
import org.apache.poi.util.BitField;
|
|
||||||
import org.apache.poi.util.BitFieldFactory;
|
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,229 +30,63 @@ import org.apache.poi.util.LittleEndian;
|
|||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
* @version 1.0-pre
|
* @version 1.0-pre
|
||||||
*/
|
*/
|
||||||
public final class Area3DPtg extends OperandPtg implements AreaI {
|
public final class Area3DPtg extends AreaPtgBase {
|
||||||
public final static byte sid = 0x3b;
|
public final static byte sid = 0x3b;
|
||||||
private final static int SIZE = 11; // 10 + 1 for Ptg
|
private final static int SIZE = 11; // 10 + 1 for Ptg
|
||||||
|
|
||||||
private static final BitField rowRelative = BitFieldFactory.getInstance(0x8000);
|
private int field_1_index_extern_sheet;
|
||||||
private static final BitField colRelative = BitFieldFactory.getInstance(0x4000);
|
|
||||||
|
|
||||||
private short field_1_index_extern_sheet;
|
|
||||||
private int field_2_first_row;
|
|
||||||
private int field_3_last_row;
|
|
||||||
private int field_4_first_column;
|
|
||||||
private int field_5_last_column;
|
|
||||||
|
|
||||||
|
|
||||||
/** Creates new AreaPtg */
|
public Area3DPtg( String arearef, int externIdx ) {
|
||||||
public Area3DPtg()
|
super(arearef);
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public Area3DPtg( String arearef, short externIdx )
|
|
||||||
{
|
|
||||||
setArea(arearef);
|
|
||||||
setExternSheetIndex( externIdx );
|
setExternSheetIndex( externIdx );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Area3DPtg(RecordInputStream in)
|
public Area3DPtg(RecordInputStream in) {
|
||||||
{
|
|
||||||
field_1_index_extern_sheet = in.readShort();
|
field_1_index_extern_sheet = in.readShort();
|
||||||
field_2_first_row = in.readUShort();
|
readCoordinates(in);
|
||||||
field_3_last_row = in.readUShort();
|
|
||||||
field_4_first_column = in.readUShort();
|
|
||||||
field_5_last_column = in.readUShort();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Area3DPtg(short firstRow, short lastRow, short firstColumn, short lastColumn,
|
public Area3DPtg(int firstRow, int lastRow, int firstColumn, int lastColumn,
|
||||||
boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative,
|
boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative,
|
||||||
short externalSheetIndex) {
|
int externalSheetIndex) {
|
||||||
setFirstRow(firstRow);
|
super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative);
|
||||||
setLastRow(lastRow);
|
|
||||||
setFirstColumn(firstColumn);
|
|
||||||
setLastColumn(lastColumn);
|
|
||||||
setFirstRowRelative(firstRowRelative);
|
|
||||||
setLastRowRelative(lastRowRelative);
|
|
||||||
setFirstColRelative(firstColRelative);
|
|
||||||
setLastColRelative(lastColRelative);
|
|
||||||
setExternSheetIndex(externalSheetIndex);
|
setExternSheetIndex(externalSheetIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuffer sb = new StringBuffer();
|
StringBuffer sb = new StringBuffer();
|
||||||
sb.append(getClass().getName());
|
sb.append(getClass().getName());
|
||||||
sb.append(" [");
|
|
||||||
sb.append("sheetIx=").append(getExternSheetIndex());
|
sb.append("sheetIx=").append(getExternSheetIndex());
|
||||||
sb.append(" ! ");
|
sb.append(" ! ");
|
||||||
sb.append(AreaReference.formatAsString(this));
|
sb.append(formatReferenceAsString());
|
||||||
sb.append("]");
|
sb.append("]");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeBytes( byte[] array, int offset )
|
public void writeBytes(byte[] array, int offset) {
|
||||||
{
|
LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
|
||||||
array[0 + offset] = (byte) ( sid + getPtgClass() );
|
LittleEndian.putUShort(array, 1 + offset, field_1_index_extern_sheet);
|
||||||
LittleEndian.putShort( array, 1 + offset, getExternSheetIndex() );
|
writeCoordinates(array, offset+3);
|
||||||
LittleEndian.putShort( array, 3 + offset, (short)getFirstRow() );
|
|
||||||
LittleEndian.putShort( array, 5 + offset, (short)getLastRow() );
|
|
||||||
LittleEndian.putShort( array, 7 + offset, (short)getFirstColumnRaw() );
|
|
||||||
LittleEndian.putShort( array, 9 + offset, (short)getLastColumnRaw() );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize()
|
public int getSize() {
|
||||||
{
|
|
||||||
return SIZE;
|
return SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public short getExternSheetIndex()
|
public short getExternSheetIndex() {
|
||||||
{
|
return (short)field_1_index_extern_sheet;
|
||||||
return field_1_index_extern_sheet;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setExternSheetIndex( short index )
|
public void setExternSheetIndex(int index) {
|
||||||
{
|
|
||||||
field_1_index_extern_sheet = index;
|
field_1_index_extern_sheet = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getFirstRow()
|
|
||||||
{
|
|
||||||
return field_2_first_row;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFirstRow( int row )
|
|
||||||
{
|
|
||||||
field_2_first_row = row;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getLastRow()
|
|
||||||
{
|
|
||||||
return field_3_last_row;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLastRow( int row )
|
|
||||||
{
|
|
||||||
field_3_last_row = row;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getFirstColumn()
|
|
||||||
{
|
|
||||||
return field_4_first_column & 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getFirstColumnRaw()
|
|
||||||
{
|
|
||||||
return field_4_first_column;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isFirstRowRelative()
|
|
||||||
{
|
|
||||||
return rowRelative.isSet( field_4_first_column );
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isFirstColRelative()
|
|
||||||
{
|
|
||||||
return colRelative.isSet( field_4_first_column );
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFirstColumn( short column )
|
|
||||||
{
|
|
||||||
field_4_first_column &= 0xFF00;
|
|
||||||
field_4_first_column |= column & 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFirstColumnRaw( short column )
|
|
||||||
{
|
|
||||||
field_4_first_column = column;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getLastColumn()
|
|
||||||
{
|
|
||||||
return field_5_last_column & 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getLastColumnRaw()
|
|
||||||
{
|
|
||||||
return field_5_last_column;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isLastRowRelative()
|
|
||||||
{
|
|
||||||
return rowRelative.isSet( field_5_last_column );
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isLastColRelative()
|
|
||||||
{
|
|
||||||
return colRelative.isSet( field_5_last_column );
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLastColumn( short column )
|
|
||||||
{
|
|
||||||
field_5_last_column &= 0xFF00;
|
|
||||||
field_5_last_column |= column & 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLastColumnRaw( short column )
|
|
||||||
{
|
|
||||||
field_5_last_column = column;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sets the first row to relative or not
|
|
||||||
* @param rel FIXME: Document this!
|
|
||||||
*/
|
|
||||||
public void setFirstRowRelative( boolean rel )
|
|
||||||
{
|
|
||||||
field_4_first_column = rowRelative.setBoolean( field_4_first_column, rel );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* set whether the first column is relative
|
|
||||||
*/
|
|
||||||
public void setFirstColRelative( boolean rel )
|
|
||||||
{
|
|
||||||
field_4_first_column = colRelative.setBoolean( field_4_first_column, rel );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* set whether the last row is relative or not
|
|
||||||
* @param rel FIXME: Document this!
|
|
||||||
*/
|
|
||||||
public void setLastRowRelative( boolean rel )
|
|
||||||
{
|
|
||||||
field_5_last_column = rowRelative.setBoolean( field_5_last_column, rel );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* set whether the last column should be relative or not
|
|
||||||
*/
|
|
||||||
public void setLastColRelative( boolean rel )
|
|
||||||
{
|
|
||||||
field_5_last_column = colRelative.setBoolean( field_5_last_column, rel );
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setArea( String ref ) {
|
|
||||||
AreaReference ar = new AreaReference( ref );
|
|
||||||
|
|
||||||
CellReference frstCell = ar.getFirstCell();
|
|
||||||
CellReference lastCell = ar.getLastCell();
|
|
||||||
|
|
||||||
setFirstRow(frstCell.getRow());
|
|
||||||
setFirstColumn(frstCell.getCol());
|
|
||||||
setLastRow(lastCell.getRow());
|
|
||||||
setLastColumn(lastCell.getCol());
|
|
||||||
setFirstColRelative(!frstCell.isColAbsolute());
|
|
||||||
setLastColRelative(!lastCell.isColAbsolute());
|
|
||||||
setFirstRowRelative(!frstCell.isRowAbsolute());
|
|
||||||
setLastRowRelative(!lastCell.isRowAbsolute());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return text representation of this area reference that can be used in text
|
* @return text representation of this area reference that can be used in text
|
||||||
* formulas. The sheet name will get properly delimited if required.
|
* formulas. The sheet name will get properly delimited if required.
|
||||||
*/
|
*/
|
||||||
public String toFormulaString(HSSFWorkbook book)
|
public String toFormulaString(HSSFWorkbook book) {
|
||||||
{
|
|
||||||
// First do the sheet name
|
// First do the sheet name
|
||||||
StringBuffer retval = new StringBuffer();
|
StringBuffer retval = new StringBuffer();
|
||||||
String sheetName = Ref3DPtg.getSheetName(book, field_1_index_extern_sheet);
|
String sheetName = Ref3DPtg.getSheetName(book, field_1_index_extern_sheet);
|
||||||
@ -273,29 +103,8 @@ public final class Area3DPtg extends OperandPtg implements AreaI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now the normal area bit
|
// Now the normal area bit
|
||||||
retval.append(AreaReference.formatAsString(this));
|
retval.append(formatReferenceAsString());
|
||||||
|
|
||||||
// All done
|
|
||||||
return retval.toString();
|
return retval.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte getDefaultOperandClass() {
|
|
||||||
return Ptg.CLASS_REF;
|
|
||||||
}
|
|
||||||
// TODO - one junit relies on this. remove
|
|
||||||
public boolean equals( Object o )
|
|
||||||
{
|
|
||||||
if ( this == o ) return true;
|
|
||||||
if ( !( o instanceof Area3DPtg ) ) return false;
|
|
||||||
|
|
||||||
final Area3DPtg area3DPtg = (Area3DPtg) o;
|
|
||||||
|
|
||||||
if ( field_1_index_extern_sheet != area3DPtg.field_1_index_extern_sheet ) return false;
|
|
||||||
if ( field_2_first_row != area3DPtg.field_2_first_row ) return false;
|
|
||||||
if ( field_3_last_row != area3DPtg.field_3_last_row ) return false;
|
|
||||||
if ( field_4_first_column != area3DPtg.field_4_first_column ) return false;
|
|
||||||
if ( field_5_last_column != area3DPtg.field_5_last_column ) return false;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -40,21 +40,4 @@ public interface AreaI {
|
|||||||
* @return lastcolumn in the area
|
* @return lastcolumn in the area
|
||||||
*/
|
*/
|
||||||
public int getLastColumn();
|
public int getLastColumn();
|
||||||
|
|
||||||
/**
|
|
||||||
* @return isrelative first column to relative or not
|
|
||||||
*/
|
|
||||||
public boolean isFirstColRelative();
|
|
||||||
/**
|
|
||||||
* @return lastcol relative or not
|
|
||||||
*/
|
|
||||||
public boolean isLastColRelative();
|
|
||||||
/**
|
|
||||||
* @return whether or not the first row is a relative reference or not.
|
|
||||||
*/
|
|
||||||
public boolean isFirstRowRelative();
|
|
||||||
/**
|
|
||||||
* @return last row relative or not
|
|
||||||
*/
|
|
||||||
public boolean isLastRowRelative();
|
|
||||||
}
|
}
|
@ -23,7 +23,7 @@ import org.apache.poi.hssf.record.RecordInputStream;
|
|||||||
* Specifies a rectangular area of cells A1:A4 for instance.
|
* Specifies a rectangular area of cells A1:A4 for instance.
|
||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
*/
|
*/
|
||||||
public final class AreaNPtg extends AreaPtgBase {
|
public final class AreaNPtg extends Area2DPtgBase {
|
||||||
public final static short sid = 0x2D;
|
public final static short sid = 0x2D;
|
||||||
|
|
||||||
public AreaNPtg(RecordInputStream in) {
|
public AreaNPtg(RecordInputStream in) {
|
||||||
|
@ -23,7 +23,7 @@ import org.apache.poi.hssf.record.RecordInputStream;
|
|||||||
* Specifies a rectangular area of cells A1:A4 for instance.
|
* Specifies a rectangular area of cells A1:A4 for instance.
|
||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
*/
|
*/
|
||||||
public final class AreaPtg extends AreaPtgBase {
|
public final class AreaPtg extends Area2DPtgBase {
|
||||||
public final static short sid = 0x25;
|
public final static short sid = 0x25;
|
||||||
|
|
||||||
public AreaPtg(int firstRow, int lastRow, int firstColumn, int lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {
|
public AreaPtg(int firstRow, int lastRow, int firstColumn, int lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) {
|
||||||
|
@ -40,8 +40,6 @@ public abstract class AreaPtgBase extends OperandPtg implements AreaI {
|
|||||||
return new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
|
return new RuntimeException("Coding Error: This method should never be called. This ptg should be converted");
|
||||||
}
|
}
|
||||||
|
|
||||||
public final static short sid = 0x25;
|
|
||||||
private final static int SIZE = 9;
|
|
||||||
/** zero based, unsigned 16 bit */
|
/** zero based, unsigned 16 bit */
|
||||||
private int field_1_first_row;
|
private int field_1_first_row;
|
||||||
/** zero based, unsigned 16 bit */
|
/** zero based, unsigned 16 bit */
|
||||||
@ -55,6 +53,10 @@ public abstract class AreaPtgBase extends OperandPtg implements AreaI {
|
|||||||
private final static BitField colRelative = BitFieldFactory.getInstance(0x4000);
|
private final static BitField colRelative = BitFieldFactory.getInstance(0x4000);
|
||||||
private final static BitField columnMask = BitFieldFactory.getInstance(0x3FFF);
|
private final static BitField columnMask = BitFieldFactory.getInstance(0x3FFF);
|
||||||
|
|
||||||
|
protected AreaPtgBase() {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
protected AreaPtgBase(String arearef) {
|
protected AreaPtgBase(String arearef) {
|
||||||
AreaReference ar = new AreaReference(arearef);
|
AreaReference ar = new AreaReference(arearef);
|
||||||
CellReference firstCell = ar.getFirstCell();
|
CellReference firstCell = ar.getFirstCell();
|
||||||
@ -97,35 +99,17 @@ public abstract class AreaPtgBase extends OperandPtg implements AreaI {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected AreaPtgBase(RecordInputStream in)
|
protected final void readCoordinates(RecordInputStream in) {
|
||||||
{
|
|
||||||
field_1_first_row = in.readUShort();
|
field_1_first_row = in.readUShort();
|
||||||
field_2_last_row = in.readUShort();
|
field_2_last_row = in.readUShort();
|
||||||
field_3_first_column = in.readUShort();
|
field_3_first_column = in.readUShort();
|
||||||
field_4_last_column = in.readUShort();
|
field_4_last_column = in.readUShort();
|
||||||
}
|
}
|
||||||
|
protected final void writeCoordinates(byte[] array, int offset) {
|
||||||
public final String toString() {
|
LittleEndian.putUShort(array, offset + 0, field_1_first_row);
|
||||||
StringBuffer sb = new StringBuffer();
|
LittleEndian.putUShort(array, offset + 2, field_2_last_row);
|
||||||
sb.append(getClass().getName());
|
LittleEndian.putUShort(array, offset + 4, field_3_first_column);
|
||||||
sb.append(" [");
|
LittleEndian.putUShort(array, offset + 6, field_4_last_column);
|
||||||
sb.append(AreaReference.formatAsString(this));
|
|
||||||
sb.append("]");
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
protected abstract byte getSid();
|
|
||||||
|
|
||||||
public final void writeBytes(byte [] array, int offset) {
|
|
||||||
array[offset] = (byte) (getSid() + getPtgClass());
|
|
||||||
LittleEndian.putShort(array,offset+1,(short)field_1_first_row);
|
|
||||||
LittleEndian.putShort(array,offset+3,(short)field_2_last_row);
|
|
||||||
LittleEndian.putShort(array,offset+5,(short)field_3_first_column);
|
|
||||||
LittleEndian.putShort(array,offset+7,(short)field_4_last_column);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public final int getSize() {
|
|
||||||
return SIZE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -275,9 +259,18 @@ public abstract class AreaPtgBase extends OperandPtg implements AreaI {
|
|||||||
public final void setLastColumnRaw(short column) {
|
public final void setLastColumnRaw(short column) {
|
||||||
field_4_last_column = column;
|
field_4_last_column = column;
|
||||||
}
|
}
|
||||||
|
protected final String formatReferenceAsString() {
|
||||||
|
CellReference topLeft = new CellReference(getFirstRow(),getFirstColumn(),!isFirstRowRelative(),!isFirstColRelative());
|
||||||
|
CellReference botRight = new CellReference(getLastRow(),getLastColumn(),!isLastRowRelative(),!isLastColRelative());
|
||||||
|
|
||||||
|
if(AreaReference.isWholeColumnReference(topLeft, botRight)) {
|
||||||
|
return (new AreaReference(topLeft, botRight)).formatAsString();
|
||||||
|
}
|
||||||
|
return topLeft.formatAsString() + ":" + botRight.formatAsString();
|
||||||
|
}
|
||||||
|
|
||||||
public String toFormulaString(HSSFWorkbook book) {
|
public String toFormulaString(HSSFWorkbook book) {
|
||||||
return AreaReference.formatAsString(this);
|
return formatReferenceAsString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte getDefaultOperandClass() {
|
public byte getDefaultOperandClass() {
|
||||||
|
@ -925,35 +925,17 @@ public class HSSFWorkbook extends POIDocument
|
|||||||
Stack ptgs = new Stack();
|
Stack ptgs = new Stack();
|
||||||
|
|
||||||
if (settingRowAndColumn) {
|
if (settingRowAndColumn) {
|
||||||
final int exprsSize = 2 * 11 + 1; // Area3DPtg.SIZE + UnionPtg.SIZE
|
final int exprsSize = 2 * 11 + 1; // 2 * Area3DPtg.SIZE + UnionPtg.SIZE
|
||||||
ptgs.add(new MemFuncPtg(exprsSize));
|
ptgs.add(new MemFuncPtg(exprsSize));
|
||||||
}
|
}
|
||||||
if (startColumn >= 0)
|
if (startColumn >= 0) {
|
||||||
{
|
Area3DPtg colArea = new Area3DPtg(0, MAX_ROW, startColumn, endColumn,
|
||||||
Area3DPtg colArea = new Area3DPtg();
|
false, false, false, false, externSheetIndex);
|
||||||
colArea.setExternSheetIndex(externSheetIndex);
|
|
||||||
colArea.setFirstColumn((short)startColumn);
|
|
||||||
colArea.setLastColumn((short)endColumn);
|
|
||||||
colArea.setFirstRow(0);
|
|
||||||
colArea.setLastRow(MAX_ROW);
|
|
||||||
colArea.setFirstColRelative(false);
|
|
||||||
colArea.setLastColRelative(false);
|
|
||||||
colArea.setFirstRowRelative(false);
|
|
||||||
colArea.setLastRowRelative(false);
|
|
||||||
ptgs.add(colArea);
|
ptgs.add(colArea);
|
||||||
}
|
}
|
||||||
if (startRow >= 0)
|
if (startRow >= 0) {
|
||||||
{
|
Area3DPtg rowArea = new Area3DPtg(startRow, endRow, 0, MAX_COLUMN,
|
||||||
Area3DPtg rowArea = new Area3DPtg();
|
false, false, false, false, externSheetIndex);
|
||||||
rowArea.setExternSheetIndex(externSheetIndex);
|
|
||||||
rowArea.setFirstColumn((short)0);
|
|
||||||
rowArea.setLastColumn(MAX_COLUMN);
|
|
||||||
rowArea.setFirstRow(startRow);
|
|
||||||
rowArea.setLastRow(endRow);
|
|
||||||
rowArea.setFirstColRelative(false);
|
|
||||||
rowArea.setLastColRelative(false);
|
|
||||||
rowArea.setFirstRowRelative(false);
|
|
||||||
rowArea.setLastRowRelative(false);
|
|
||||||
ptgs.add(rowArea);
|
ptgs.add(rowArea);
|
||||||
}
|
}
|
||||||
if (settingRowAndColumn)
|
if (settingRowAndColumn)
|
||||||
|
@ -20,8 +20,6 @@ package org.apache.poi.hssf.util;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.formula.AreaI;
|
|
||||||
|
|
||||||
public final class AreaReference {
|
public final class AreaReference {
|
||||||
|
|
||||||
/** The character (!) that separates sheet names from cell references */
|
/** The character (!) that separates sheet names from cell references */
|
||||||
@ -211,18 +209,7 @@ public final class AreaReference {
|
|||||||
}
|
}
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Formats a 2-D area as it would appear in a formula. See formatAsString() (no-arg)
|
|
||||||
*/
|
|
||||||
public static String formatAsString(AreaI area) {
|
|
||||||
CellReference topLeft = new CellReference(area.getFirstRow(),area.getFirstColumn(),!area.isFirstRowRelative(),!area.isFirstColRelative());
|
|
||||||
CellReference botRight = new CellReference(area.getLastRow(),area.getLastColumn(),!area.isLastRowRelative(),!area.isLastColRelative());
|
|
||||||
|
|
||||||
if(isWholeColumnReference(topLeft, botRight)) {
|
|
||||||
return (new AreaReference(topLeft, botRight)).formatAsString();
|
|
||||||
}
|
|
||||||
return topLeft.formatAsString() + ":" + botRight.formatAsString();
|
|
||||||
}
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuffer sb = new StringBuffer(64);
|
StringBuffer sb = new StringBuffer(64);
|
||||||
sb.append(getClass().getName()).append(" [");
|
sb.append(getClass().getName()).append(" [");
|
||||||
|
@ -760,12 +760,8 @@ public final class HSSFChart {
|
|||||||
r.setIndexNumberFmtRecord( (short) 0 );
|
r.setIndexNumberFmtRecord( (short) 0 );
|
||||||
LinkedDataFormulaField formula = new LinkedDataFormulaField();
|
LinkedDataFormulaField formula = new LinkedDataFormulaField();
|
||||||
Stack tokens = new Stack();
|
Stack tokens = new Stack();
|
||||||
Area3DPtg p = new Area3DPtg();
|
Area3DPtg p = new Area3DPtg(0, 31, 1, 1,
|
||||||
p.setExternSheetIndex( (short) 0 );
|
false, false, false, false, 0);
|
||||||
p.setFirstColumn( (short) 1 );
|
|
||||||
p.setLastColumn( (short) 1 );
|
|
||||||
p.setFirstRow( (short) 0 );
|
|
||||||
p.setLastRow( (short) 31 );
|
|
||||||
tokens.add( p );
|
tokens.add( p );
|
||||||
formula.setFormulaTokens( tokens );
|
formula.setFormulaTokens( tokens );
|
||||||
r.setFormulaOfLink( formula );
|
r.setFormulaOfLink( formula );
|
||||||
@ -781,12 +777,8 @@ public final class HSSFChart {
|
|||||||
r.setIndexNumberFmtRecord( (short) 0 );
|
r.setIndexNumberFmtRecord( (short) 0 );
|
||||||
LinkedDataFormulaField formula = new LinkedDataFormulaField();
|
LinkedDataFormulaField formula = new LinkedDataFormulaField();
|
||||||
Stack tokens = new Stack();
|
Stack tokens = new Stack();
|
||||||
Area3DPtg p = new Area3DPtg();
|
Area3DPtg p = new Area3DPtg(0, 31, 0, 0,
|
||||||
p.setExternSheetIndex( (short) 0 );
|
false, false, false, false, 0);
|
||||||
p.setFirstColumn( (short) 0 );
|
|
||||||
p.setLastColumn( (short) 0 );
|
|
||||||
p.setFirstRow( (short) 0 );
|
|
||||||
p.setLastRow( (short) 31 );
|
|
||||||
tokens.add( p );
|
tokens.add( p );
|
||||||
formula.setFormulaTokens( tokens );
|
formula.setFormulaTokens( tokens );
|
||||||
r.setFormulaOfLink( formula );
|
r.setFormulaOfLink( formula );
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
contributor license agreements. See the NOTICE file distributed with
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
@ -16,8 +15,6 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
==================================================================== */
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
package org.apache.poi.hssf.record;
|
package org.apache.poi.hssf.record;
|
||||||
|
|
||||||
|
|
||||||
@ -33,9 +30,7 @@ import java.util.Stack;
|
|||||||
*
|
*
|
||||||
* @author Glen Stampoultzis (glens at apache.org)
|
* @author Glen Stampoultzis (glens at apache.org)
|
||||||
*/
|
*/
|
||||||
public class TestLinkedDataRecord
|
public final class TestLinkedDataRecord extends TestCase {
|
||||||
extends TestCase
|
|
||||||
{
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The records below are records that would appear in a simple bar chart
|
The records below are records that would appear in a simple bar chart
|
||||||
@ -160,14 +155,7 @@ recordid = 0x1051, size =8
|
|||||||
(byte)0x00,(byte)0x00, // index to last column and relative flags
|
(byte)0x00,(byte)0x00, // index to last column and relative flags
|
||||||
};
|
};
|
||||||
|
|
||||||
public TestLinkedDataRecord(String name)
|
public void testLoad() {
|
||||||
{
|
|
||||||
super(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void testLoad()
|
|
||||||
throws Exception
|
|
||||||
{
|
|
||||||
|
|
||||||
LinkedDataRecord record = new LinkedDataRecord(new TestcaseRecordInputStream((short)0x1051, (short)data.length, data));
|
LinkedDataRecord record = new LinkedDataRecord(new TestcaseRecordInputStream((short)0x1051, (short)data.length, data));
|
||||||
assertEquals( LinkedDataRecord.LINK_TYPE_VALUES, record.getLinkType());
|
assertEquals( LinkedDataRecord.LINK_TYPE_VALUES, record.getLinkType());
|
||||||
@ -176,19 +164,11 @@ recordid = 0x1051, size =8
|
|||||||
assertEquals( false, record.isCustomNumberFormat() );
|
assertEquals( false, record.isCustomNumberFormat() );
|
||||||
assertEquals( 0, record.getIndexNumberFmtRecord());
|
assertEquals( 0, record.getIndexNumberFmtRecord());
|
||||||
|
|
||||||
Area3DPtg ptg = new Area3DPtg();
|
Area3DPtg ptgExpected = new Area3DPtg(0, 7936, 0, 0,
|
||||||
ptg.setExternSheetIndex((short)0);
|
false, false, false, false, 0);
|
||||||
ptg.setFirstColumn((short)0);
|
|
||||||
ptg.setLastColumn((short)0);
|
Object ptgActual = record.getFormulaOfLink().getFormulaTokens().get(0);
|
||||||
ptg.setFirstRow((short)0);
|
assertEquals(ptgExpected.toString(), ptgActual.toString());
|
||||||
ptg.setLastRow((short)7936);
|
|
||||||
ptg.setFirstColRelative(false);
|
|
||||||
ptg.setLastColRelative(false);
|
|
||||||
ptg.setFirstRowRelative(false);
|
|
||||||
ptg.setLastRowRelative(false);
|
|
||||||
Stack s = new Stack();
|
|
||||||
s.push(ptg);
|
|
||||||
assertEquals( s, record.getFormulaOfLink().getFormulaTokens() );
|
|
||||||
|
|
||||||
assertEquals( data.length + 4, record.getRecordSize() );
|
assertEquals( data.length + 4, record.getRecordSize() );
|
||||||
|
|
||||||
@ -196,24 +176,15 @@ recordid = 0x1051, size =8
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testStore()
|
public void testStore() {
|
||||||
{
|
|
||||||
LinkedDataRecord record = new LinkedDataRecord();
|
LinkedDataRecord record = new LinkedDataRecord();
|
||||||
record.setLinkType( LinkedDataRecord.LINK_TYPE_VALUES );
|
record.setLinkType( LinkedDataRecord.LINK_TYPE_VALUES );
|
||||||
record.setReferenceType( LinkedDataRecord.REFERENCE_TYPE_WORKSHEET );
|
record.setReferenceType( LinkedDataRecord.REFERENCE_TYPE_WORKSHEET );
|
||||||
record.setOptions( (short)0 );
|
record.setOptions( (short)0 );
|
||||||
record.setCustomNumberFormat( false );
|
record.setCustomNumberFormat( false );
|
||||||
record.setIndexNumberFmtRecord( (short)0 );
|
record.setIndexNumberFmtRecord( (short)0 );
|
||||||
Area3DPtg ptg = new Area3DPtg();
|
Area3DPtg ptg = new Area3DPtg(0, 7936, 0, 0,
|
||||||
ptg.setExternSheetIndex((short)0);
|
false, false, false, false, 0);
|
||||||
ptg.setFirstColumn((short)0);
|
|
||||||
ptg.setLastColumn((short)0);
|
|
||||||
ptg.setFirstRow((short)0);
|
|
||||||
ptg.setLastRow((short)7936);
|
|
||||||
ptg.setFirstColRelative(false);
|
|
||||||
ptg.setLastColRelative(false);
|
|
||||||
ptg.setFirstRowRelative(false);
|
|
||||||
ptg.setLastRowRelative(false);
|
|
||||||
Stack s = new Stack();
|
Stack s = new Stack();
|
||||||
s.push(ptg);
|
s.push(ptg);
|
||||||
LinkedDataFormulaField formulaOfLink = new LinkedDataFormulaField();
|
LinkedDataFormulaField formulaOfLink = new LinkedDataFormulaField();
|
||||||
|
Loading…
Reference in New Issue
Block a user