1 /
55
56
61 package org.apache.poi.hssf.record.formula;
62
63 import org.apache.poi.util.LittleEndian;
64 import org.apache.poi.util.BitField;
65
66 import org.apache.poi.hssf.util.AreaReference;
67 import org.apache.poi.hssf.util.CellReference;
68
69
73
74 public class AreaPtg
75 extends Ptg
76 {
77 public final static short sid = 0x25;
78 private final static int SIZE = 9;
79 private short field_1_first_row;
80 private short field_2_last_row;
81 private short field_3_first_column;
82 private short field_4_last_column;
83
84 private BitField rowRelative = new BitField(0x8000);
85 private BitField colRelative = new BitField(0x4000);
86 private BitField column = new BitField(0x3FFF);
87
88
89
90 protected AreaPtg(String arearef) {
91
92 AreaReference ar = new AreaReference(arearef);
93
94 setFirstRow((short)ar.getCells()[0].getRow());
95 setFirstColumn((short)ar.getCells()[0].getCol());
96 setLastRow((short)ar.getCells()[1].getRow());
97 setLastColumn((short)ar.getCells()[1].getCol());
98 setFirstColRelative(!ar.getCells()[0].isColAbsolute());
99 setLastColRelative(!ar.getCells()[1].isColAbsolute());
100 setFirstRowRelative(!ar.getCells()[0].isRowAbsolute());
101 setLastRowRelative(!ar.getCells()[1].isRowAbsolute());
102
103 }
104
105 public AreaPtg(byte [] data, int offset)
106 {
107 offset++;
108 field_1_first_row = LittleEndian.getShort(data, 0 + offset);
109 field_2_last_row = LittleEndian.getShort(data, 2 + offset);
110 field_3_first_column = LittleEndian.getShort(data, 4 + offset);
111 field_4_last_column = LittleEndian.getShort(data, 6 + offset);
112
113 }
114
115 public String toString()
116 {
117 StringBuffer buffer = new StringBuffer();
118
119 buffer.append("AreaPtg\n");
120 buffer.append("firstRow = " + getFirstRow()).append("\n");
121 buffer.append("lastRow = " + getLastRow()).append("\n");
122 buffer.append("firstCol = " + getFirstColumn()).append("\n");
123 buffer.append("lastCol = " + getLastColumn()).append("\n");
124 buffer.append("firstColRowRel= "
125 + isFirstRowRelative()).append("\n");
126 buffer.append("lastColRowRel = "
127 + isLastRowRelative()).append("\n");
128 buffer.append("firstColRel = " + isFirstColRelative()).append("\n");
129 buffer.append("lastColRel = " + isLastColRelative()).append("\n");
130 return buffer.toString();
131 }
132
133 public void writeBytes(byte [] array, int offset) {
134 array[offset] = (byte) (sid + ptgClass);
135 LittleEndian.putShort(array,offset+1,field_1_first_row);
136 LittleEndian.putShort(array,offset+3,field_2_last_row);
137 LittleEndian.putShort(array,offset+5,field_3_first_column);
138 LittleEndian.putShort(array,offset+7,field_4_last_column);
139 }
140
141 public int getSize()
142 {
143 return SIZE;
144 }
145
146
149 public short getFirstRow()
150 {
151 return field_1_first_row;
152 }
153
154
158 public void setFirstRow(short row)
159 {
160 field_1_first_row = row;
161 }
162
163
166 public short getLastRow()
167 {
168 return field_2_last_row;
169 }
170
171
174 public void setLastRow(short row)
175 {
176 field_2_last_row = row;
177 }
178
179
182 public short getFirstColumn()
183 {
184 return column.getShortValue(field_3_first_column);
185 }
186
187
190 public short getFirstColumnRaw()
191 {
192 return field_3_first_column;
193 }
194
195
198 public boolean isFirstRowRelative()
199 {
200 return rowRelative.isSet(field_3_first_column);
201 }
202
203
207 public void setFirstRowRelative(boolean rel) {
208 field_3_first_column=rowRelative.setShortBoolean(field_3_first_column,rel);
209 }
210
211
214 public boolean isFirstColRelative()
215 {
216 return colRelative.isSet(field_3_first_column);
217 }
218
219
222 public void setFirstColRelative(boolean rel) {
223 field_3_first_column=colRelative.setShortBoolean(field_3_first_column,rel);
224 }
225
226
229 public void setFirstColumn(short column)
230 {
231 field_3_first_column = column;
232 }
233
234
237 public void setFirstColumnRaw(short column)
238 {
239 field_3_first_column = column;
240 }
241
242
245 public short getLastColumn()
246 {
247 return column.getShortValue(field_4_last_column);
248 }
249
250
253 public short getLastColumnRaw()
254 {
255 return field_4_last_column;
256 }
257
258
261 public boolean isLastRowRelative()
262 {
263 return rowRelative.isSet(field_4_last_column);
264 }
265
266
270 public void setLastRowRelative(boolean rel) {
271 field_4_last_column=rowRelative.setShortBoolean(field_4_last_column,rel);
272 }
273
274
277 public boolean isLastColRelative()
278 {
279 return colRelative.isSet(field_4_last_column);
280 }
281
282
285 public void setLastColRelative(boolean rel) {
286 field_4_last_column=colRelative.setShortBoolean(field_4_last_column,rel);
287 }
288
289
290
293 public void setLastColumn(short column)
294 {
295 field_4_last_column = column;
296 }
297
298
301 public void setLastColumnRaw(short column)
302 {
303 field_4_last_column = column;
304 }
305
306 public String toFormulaString()
307 {
308 return (new CellReference(getFirstRow(),getFirstColumn(),!isFirstRowRelative(),!isFirstColRelative())).toString() + ":" +
309 (new CellReference(getLastRow(),getLastColumn(),!isLastRowRelative(),!isLastColRelative())).toString();
310 }
311
312 public byte getDefaultOperandClass() {
313 return Ptg.CLASS_REF;
314 }
315
316 }
317