1 /
55
56 package org.apache.poi.hssf.record.formula;
57
58 import org.apache.poi.util.LittleEndian;
59 import org.apache.poi.hssf.util.RangeAddress;
60
61
68
69 public class Area3DPtg extends Ptg
70 {
71 public final static byte sid = 0x3b;
72 private final static int SIZE = 11;
73 private short field_1_index_extern_sheet;
74 private short field_2_first_row;
75 private short field_3_last_row;
76 private short field_4_first_column;
77 private short field_5_last_column;
78
79
80
81 public Area3DPtg()
82 {
83 }
84
85 public Area3DPtg(byte[] data, int offset)
86 {
87 offset++;
88 field_1_index_extern_sheet = LittleEndian.getShort(data, 0 + offset);
89 field_2_first_row = LittleEndian.getShort(data, 2 + offset);
90 field_3_last_row = LittleEndian.getShort(data, 4 + offset);
91 field_4_first_column = LittleEndian.getShort(data, 6 + offset);
92 field_5_last_column = LittleEndian.getShort(data, 8 + offset);
93 }
94
95 public String toString()
96 {
97 StringBuffer buffer = new StringBuffer();
98
99 buffer.append("AreaPtg\n");
100 buffer.append("Index to Extern Sheet = " + getExternSheetIndex()).append("\n");
101 buffer.append("firstRow = " + getFirstRow()).append("\n");
102 buffer.append("lastRow = " + getLastRow()).append("\n");
103 buffer.append("firstCol = " + getFirstColumn()).append("\n");
104 buffer.append("lastCol = " + getLastColumn()).append("\n");
105 buffer.append("firstColRowRel= "
106 + isFirstColRowRelative()).append("\n");
107 buffer.append("lastColRowRel = "
108 + isLastColRowRelative()).append("\n");
109 buffer.append("firstColRel = " + isFirstColRelative()).append("\n");
110 buffer.append("lastColRel = " + isLastColRelative()).append("\n");
111 return buffer.toString();
112 }
113
114 public void writeBytes(byte [] array, int offset)
115 {
116 array[ 0 + offset ] = sid;
117 LittleEndian.putShort(array, 1 + offset , getExternSheetIndex());
118 LittleEndian.putShort(array, 3 + offset , getFirstRow());
119 LittleEndian.putShort(array, 5 + offset , getLastRow());
120 LittleEndian.putShort(array, 7 + offset , getFirstColumnRaw());
121 LittleEndian.putShort(array, 9 + offset , getLastColumnRaw());
122 }
123
124 public int getSize()
125 {
126 return SIZE;
127 }
128
129 public short getExternSheetIndex(){
130 return field_1_index_extern_sheet;
131 }
132
133 public void setExternSheetIndex(short index){
134 field_1_index_extern_sheet = index;
135 }
136
137 public short getFirstRow()
138 {
139 return field_2_first_row;
140 }
141
142 public void setFirstRow(short row)
143 {
144 field_2_first_row = row;
145 }
146
147 public short getLastRow()
148 {
149 return field_3_last_row;
150 }
151
152 public void setLastRow(short row)
153 {
154 field_3_last_row = row;
155 }
156
157 public short getFirstColumn()
158 {
159 return ( short ) (field_4_first_column & 0xFF);
160 }
161
162 public short getFirstColumnRaw()
163 {
164 return field_4_first_column;
165 }
166
167 public boolean isFirstColRowRelative()
168 {
169 return (((getFirstColumnRaw()) & 0x8000) == 0x8000);
170 }
171
172 public boolean isFirstColRelative()
173 {
174 return (((getFirstColumnRaw()) & 0x4000) == 0x4000);
175 }
176
177 public void setFirstColumn(short column)
178 {
179 field_4_first_column &= 0xFF00;
180 field_4_first_column |= column & 0xFF;
181 }
182
183 public void setFirstColumnRaw(short column)
184 {
185 field_4_first_column = column;
186 }
187
188 public short getLastColumn()
189 {
190 return ( short ) (field_5_last_column & 0xFF);
191 }
192
193 public short getLastColumnRaw()
194 {
195 return field_5_last_column;
196 }
197
198 public boolean isLastColRowRelative()
199 {
200 return (((getLastColumnRaw()) & 0x8000) == 1);
201 }
202
203 public boolean isLastColRelative()
204 {
205 return (((getFirstColumnRaw()) & 0x4000) == 1);
206 }
207
208 public void setLastColumn(short column)
209 {
210 field_5_last_column &= 0xFF00;
211 field_5_last_column |= column & 0xFF;
212 }
213
214 public void setLastColumnRaw(short column)
215 {
216 field_5_last_column = column;
217 }
218
219 public String getArea(){
220 RangeAddress ra = new RangeAddress( getFirstColumn(),getFirstRow() + 1, getLastColumn(), getLastRow() + 1);
221 String result = ra.getAddress();
222
223 return result;
224 }
225
226 public void setArea(String ref){
227 RangeAddress ra = new RangeAddress(ref);
228
229 String from = ra.getFromCell();
230 String to = ra.getToCell();
231
232 setFirstColumn((short) (ra.getXPosition(from) -1));
233 setFirstRow((short) (ra.getYPosition(from) -1));
234 setLastColumn((short) (ra.getXPosition(to) -1));
235 setLastRow((short) (ra.getYPosition(to) -1));
236
237 }
238
239 public String toFormulaString()
240 {
241 String result = getArea();
242
243 return result;
244 }
245
246 public byte getDefaultOperandClass() {
247 return Ptg.CLASS_VALUE;
248 }
249
250 }
251