1
2
3
56
57 package org.apache.poi.hssf.record.formula;
58
59 import org.apache.poi.util.LittleEndian;
60
61 import org.apache.poi.hssf.util.RangeAddress;
62 import org.apache.poi.hssf.util.CellReference;
63 import org.apache.poi.hssf.util.SheetReferences;
64 import org.apache.poi.util.BitField;
65 import org.apache.poi.hssf.model.Workbook;
66
67
75
76 public class Ref3DPtg extends Ptg {
77 public final static byte sid = 0x3a;
78 private final static int SIZE = 7;
79 private short field_1_index_extern_sheet;
80 private short field_2_row;
81 private short field_3_column;
82 private BitField rowRelative = new BitField(0x8000);
83 private BitField colRelative = new BitField(0x4000);
84
85
86 public Ref3DPtg() {}
87
88 public Ref3DPtg(byte[] data, int offset) {
89 offset++;
90 field_1_index_extern_sheet = LittleEndian.getShort(data, 0 + offset);
91 field_2_row = LittleEndian.getShort(data, 2 + offset);
92 field_3_column = LittleEndian.getShort(data, 4 + offset);
93 }
94
95 public Ref3DPtg(String cellref, short externIdx ) {
96 CellReference c= new CellReference(cellref);
97 setRow((short) c.getRow());
98 setColumn((short) c.getCol());
99 setColRelative(!c.isColAbsolute());
100 setRowRelative(!c.isRowAbsolute());
101 setExternSheetIndex(externIdx);
102 }
103
104 public String toString() {
105 StringBuffer buffer = new StringBuffer();
106
107 buffer.append("Ref3dPrg\n");
108 buffer.append("Index to Extern Sheet = " + getExternSheetIndex()).append("\n");
109 buffer.append("Row = " + getRow()).append("\n");
110 buffer.append("Col = " + getColumn()).append("\n");
111 buffer.append("ColRowRel= "
112 + isRowRelative()).append("\n");
113 buffer.append("ColRel = " + isColRelative()).append("\n");
114 return buffer.toString();
115 }
116
117 public void writeBytes(byte [] array, int offset) {
118 array[ 0 + offset ] = (byte) (sid + ptgClass);
119 LittleEndian.putShort(array, 1 + offset , getExternSheetIndex());
120 LittleEndian.putShort(array, 3 + offset , getRow());
121 LittleEndian.putShort(array, 5 + offset , getColumnRaw());
122 }
123
124 public int getSize() {
125 return SIZE;
126 }
127
128 public short getExternSheetIndex(){
129 return field_1_index_extern_sheet;
130 }
131
132 public void setExternSheetIndex(short index){
133 field_1_index_extern_sheet = index;
134 }
135
136 public short getRow() {
137 return field_2_row;
138 }
139
140 public void setRow(short row) {
141 field_2_row = row;
142 }
143
144 public short getColumn() {
145 return ( short ) (field_3_column & 0xFF);
146 }
147
148 public short getColumnRaw() {
149 return field_3_column;
150 }
151
152 public boolean isRowRelative()
153 {
154 return rowRelative.isSet(field_3_column);
155 }
156
157 public void setRowRelative(boolean rel) {
158 field_3_column=rowRelative.setShortBoolean(field_3_column,rel);
159 }
160
161 public boolean isColRelative()
162 {
163 return colRelative.isSet(field_3_column);
164 }
165
166 public void setColRelative(boolean rel) {
167 field_3_column=colRelative.setShortBoolean(field_3_column,rel);
168 }
169 public void setColumn(short column) {
170 field_3_column &= 0xFF00;
171 field_3_column |= column & 0xFF;
172 }
173
174 public void setColumnRaw(short column) {
175 field_3_column = column;
176 }
177
178
185
186 public void setArea(String ref){
187 RangeAddress ra = new RangeAddress(ref);
188
189 String from = ra.getFromCell();
190
191 setColumn((short) (ra.getXPosition(from) -1));
192 setRow((short) (ra.getYPosition(from) -1));
193
194 }
195
196 public String toFormulaString(SheetReferences refs) {
197 StringBuffer retval = new StringBuffer();
198 if (refs != null) {
199 retval.append(refs.getSheetName((int)this.field_1_index_extern_sheet));
200 retval.append('!');
201 }
202 retval.append((new CellReference(getRow(),getColumn(),!isRowRelative(),!isColRelative())).toString());
203 return retval.toString();
204 }
205
206 public byte getDefaultOperandClass() {return Ptg.CLASS_REF;}
207
208 public Object clone() {
209 Ref3DPtg ptg = new Ref3DPtg();
210 ptg.field_1_index_extern_sheet = field_1_index_extern_sheet;
211 ptg.field_2_row = field_2_row;
212 ptg.field_3_column = field_3_column;
213 return ptg;
214 }
215
216 }
217