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 import org.apache.poi.hssf.util.SheetReferences;
69
70
75
76 public class AreaPtg
77 extends Ptg
78 {
79 public final static short sid = 0x25;
80 private final static int SIZE = 9;
81 private short field_1_first_row;
82 private short field_2_last_row;
83 private short field_3_first_column;
84 private short field_4_last_column;
85
86 private BitField rowRelative = new BitField(0x8000);
87 private BitField colRelative = new BitField(0x4000);
88 private BitField column = new BitField(0x3FFF);
89
90 private AreaPtg() {
91
92 }
93
94 public AreaPtg(String arearef) {
95 AreaReference ar = new AreaReference(arearef);
96 setFirstRow((short)ar.getCells()[0].getRow());
97 setFirstColumn((short)ar.getCells()[0].getCol());
98 setLastRow((short)ar.getCells()[1].getRow());
99 setLastColumn((short)ar.getCells()[1].getCol());
100 setFirstColRelative(!ar.getCells()[0].isColAbsolute());
101 setLastColRelative(!ar.getCells()[1].isColAbsolute());
102 setFirstRowRelative(!ar.getCells()[0].isRowAbsolute());
103 setLastRowRelative(!ar.getCells()[1].isRowAbsolute());
104
105 }
106
107 public AreaPtg(byte [] data, int offset)
108 {
109 offset++;
110 field_1_first_row = LittleEndian.getShort(data, 0 + offset);
111 field_2_last_row = LittleEndian.getShort(data, 2 + offset);
112 field_3_first_column = LittleEndian.getShort(data, 4 + offset);
113 field_4_last_column = LittleEndian.getShort(data, 6 + offset);
114
115 }
116
117 public String toString()
118 {
119 StringBuffer buffer = new StringBuffer();
120
121 buffer.append("AreaPtg\n");
122 buffer.append("firstRow = " + getFirstRow()).append("\n");
123 buffer.append("lastRow = " + getLastRow()).append("\n");
124 buffer.append("firstCol = " + getFirstColumn()).append("\n");
125 buffer.append("lastCol = " + getLastColumn()).append("\n");
126 buffer.append("firstColRowRel= "
127 + isFirstRowRelative()).append("\n");
128 buffer.append("lastColRowRel = "
129 + isLastRowRelative()).append("\n");
130 buffer.append("firstColRel = " + isFirstColRelative()).append("\n");
131 buffer.append("lastColRel = " + isLastColRelative()).append("\n");
132 return buffer.toString();
133 }
134
135 public void writeBytes(byte [] array, int offset) {
136 array[offset] = (byte) (sid + ptgClass);
137 LittleEndian.putShort(array,offset+1,field_1_first_row);
138 LittleEndian.putShort(array,offset+3,field_2_last_row);
139 LittleEndian.putShort(array,offset+5,field_3_first_column);
140 LittleEndian.putShort(array,offset+7,field_4_last_column);
141 }
142
143 public int getSize()
144 {
145 return SIZE;
146 }
147
148
151 public short getFirstRow()
152 {
153 return field_1_first_row;
154 }
155
156
160 public void setFirstRow(short row)
161 {
162 field_1_first_row = row;
163 }
164
165
168 public short getLastRow()
169 {
170 return field_2_last_row;
171 }
172
173
176 public void setLastRow(short row)
177 {
178 field_2_last_row = row;
179 }
180
181
184 public short getFirstColumn()
185 {
186 return column.getShortValue(field_3_first_column);
187 }
188
189
192 public short getFirstColumnRaw()
193 {
194 return field_3_first_column;
195 }
196
197
200 public boolean isFirstRowRelative()
201 {
202 return rowRelative.isSet(field_3_first_column);
203 }
204
205
209 public void setFirstRowRelative(boolean rel) {
210 field_3_first_column=rowRelative.setShortBoolean(field_3_first_column,rel);
211 }
212
213
216 public boolean isFirstColRelative()
217 {
218 return colRelative.isSet(field_3_first_column);
219 }
220
221
224 public void setFirstColRelative(boolean rel) {
225 field_3_first_column=colRelative.setShortBoolean(field_3_first_column,rel);
226 }
227
228
231 public void setFirstColumn(short column)
232 {
233 field_3_first_column = column;
234 }
235
236
239 public void setFirstColumnRaw(short column)
240 {
241 field_3_first_column = column;
242 }
243
244
247 public short getLastColumn()
248 {
249 return column.getShortValue(field_4_last_column);
250 }
251
252
255 public short getLastColumnRaw()
256 {
257 return field_4_last_column;
258 }
259
260
263 public boolean isLastRowRelative()
264 {
265 return rowRelative.isSet(field_4_last_column);
266 }
267
268
272 public void setLastRowRelative(boolean rel) {
273 field_4_last_column=rowRelative.setShortBoolean(field_4_last_column,rel);
274 }
275
276
279 public boolean isLastColRelative()
280 {
281 return colRelative.isSet(field_4_last_column);
282 }
283
284
287 public void setLastColRelative(boolean rel) {
288 field_4_last_column=colRelative.setShortBoolean(field_4_last_column,rel);
289 }
290
291
292
295 public void setLastColumn(short column)
296 {
297 field_4_last_column = column;
298 }
299
300
303 public void setLastColumnRaw(short column)
304 {
305 field_4_last_column = column;
306 }
307
308 public String toFormulaString(SheetReferences refs)
309 {
310 return (new CellReference(getFirstRow(),getFirstColumn(),!isFirstRowRelative(),!isFirstColRelative())).toString() + ":" +
311 (new CellReference(getLastRow(),getLastColumn(),!isLastRowRelative(),!isLastColRelative())).toString();
312 }
313
314 public byte getDefaultOperandClass() {
315 return Ptg.CLASS_REF;
316 }
317
318 public Object clone() {
319 AreaPtg ptg = new AreaPtg();
320 ptg.field_1_first_row = field_1_first_row;
321 ptg.field_2_last_row = field_2_last_row;
322 ptg.field_3_first_column = field_3_first_column;
323 ptg.field_4_last_column = field_4_last_column;
324 return ptg;
325 }
326
327 }
328