1
2
3
56
57 package org.apache.poi.hssf.record.formula;
58
59 import org.apache.poi.util.LittleEndian;
60 import org.apache.poi.hssf.util.RangeAddress;
61
62
69
70 public class Ref3DPtg extends Ptg {
71 public final static byte sid = 0x3a;
72 private final static int SIZE = 7;
73 private short field_1_index_extern_sheet;
74 private short field_2_row;
75 private short field_3_column;
76
77
78
79 public Ref3DPtg() {
80 }
81
82 public Ref3DPtg(byte[] data, int offset) {
83 offset++;
84 field_1_index_extern_sheet = LittleEndian.getShort(data, 0 + offset);
85 field_2_row = LittleEndian.getShort(data, 2 + offset);
86 field_3_column = LittleEndian.getShort(data, 4 + offset);
87 }
88
89 public String toString() {
90 StringBuffer buffer = new StringBuffer();
91
92 buffer.append("Ref3dPrg\n");
93 buffer.append("Index to Extern Sheet = " + getExternSheetIndex()).append("\n");
94 buffer.append("Row = " + getRow()).append("\n");
95 buffer.append("Col = " + getColumn()).append("\n");
96 buffer.append("ColRowRel= "
97 + isColRowRelative()).append("\n");
98 buffer.append("ColRel = " + isColRelative()).append("\n");
99 return buffer.toString();
100 }
101
102 public void writeBytes(byte [] array, int offset) {
103 array[ 0 + offset ] = sid;
104 LittleEndian.putShort(array, 1 + offset , getExternSheetIndex());
105 LittleEndian.putShort(array, 3 + offset , getRow());
106 LittleEndian.putShort(array, 5 + offset , getColumnRaw());
107 }
108
109 public int getSize() {
110 return SIZE;
111 }
112
113 public short getExternSheetIndex(){
114 return field_1_index_extern_sheet;
115 }
116
117 public void setExternSheetIndex(short index){
118 field_1_index_extern_sheet = index;
119 }
120
121 public short getRow() {
122 return field_2_row;
123 }
124
125 public void setRow(short row) {
126 field_2_row = row;
127 }
128
129 public short getColumn() {
130 return ( short ) (field_3_column & 0xFF);
131 }
132
133 public short getColumnRaw() {
134 return field_3_column;
135 }
136
137 public boolean isColRowRelative() {
138 return (((getColumnRaw()) & 0x8000) == 0x8000);
139 }
140
141 public boolean isColRelative() {
142 return (((getColumnRaw()) & 0x4000) == 0x4000);
143 }
144
145 public void setColumn(short column) {
146 field_3_column &= 0xFF00;
147 field_3_column |= column & 0xFF;
148 }
149
150 public void setColumnRaw(short column) {
151 field_3_column = column;
152 }
153
154 public String getArea(){
155 RangeAddress ra = new RangeAddress("");
156
157 String result = (ra.numTo26Sys(getColumn()) + (getRow() + 1));
158
159 return result;
160 }
161
162 public void setArea(String ref){
163 RangeAddress ra = new RangeAddress(ref);
164
165 String from = ra.getFromCell();
166
167 setColumn((short) (ra.getXPosition(from) -1));
168 setRow((short) (ra.getYPosition(from) -1));
169
170 }
171
172 public String toFormulaString() {
173 String result = getArea();
174
175 return result;
176 }
177
178 public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;}
179
180 }
181