Lines 21-30
Link Here
|
21 |
|
21 |
|
22 |
import junit.framework.TestCase; |
22 |
import junit.framework.TestCase; |
23 |
|
23 |
|
24 |
import org.apache.poi.hssf.usermodel.HSSFCell; |
24 |
import org.apache.poi.hssf.usermodel.*; |
25 |
import org.apache.poi.hssf.usermodel.HSSFRow; |
25 |
import org.apache.poi.hssf.model.Workbook; |
26 |
import org.apache.poi.hssf.usermodel.HSSFSheet; |
26 |
import org.apache.poi.hssf.record.NameRecord; |
|
|
27 |
import org.apache.poi.hssf.record.formula.MemFuncPtg; |
28 |
import org.apache.poi.hssf.record.formula.Area3DPtg; |
29 |
import org.apache.poi.hssf.record.formula.UnionPtg; |
27 |
|
30 |
|
|
|
31 |
import java.io.FileInputStream; |
32 |
import java.io.InputStream; |
33 |
import java.util.List; |
34 |
|
28 |
public class TestAreaReference extends TestCase { |
35 |
public class TestAreaReference extends TestCase { |
29 |
public TestAreaReference(String s) { |
36 |
public TestAreaReference(String s) { |
30 |
super(s); |
37 |
super(s); |
Lines 60-67
Link Here
|
60 |
assertEquals("Not Column B", (short)1,myCellReference[0].getCol()); |
67 |
assertEquals("Not Column B", (short)1,myCellReference[0].getCol()); |
61 |
assertEquals("Not Row 5", 4,myCellReference[0].getRow()); |
68 |
assertEquals("Not Row 5", 4,myCellReference[0].getRow()); |
62 |
} |
69 |
} |
|
|
70 |
|
71 |
private static class HSSFWB extends HSSFWorkbook { |
72 |
private HSSFWB(InputStream in) throws Exception { |
73 |
super(in); |
74 |
} |
75 |
public Workbook getWorkbook() { |
76 |
return super.getWorkbook(); |
77 |
} |
78 |
} |
79 |
|
80 |
public void testContiguousReferences() throws Exception { |
81 |
String refSimple = "$C$10"; |
82 |
String ref2D = "$C$10:$D$11"; |
83 |
String refDCSimple = "$C$10,$D$12,$E$14"; |
84 |
String refDC2D = "$C$10:$C$11,$D$12,$E$14:$E$20"; |
85 |
String refDC3D = "Tabelle1!$C$10:$C$14,Tabelle1!$D$10:$D$12"; |
86 |
|
87 |
// Check that we detect as contiguous properly |
88 |
assertTrue(AreaReference.isContiguous(refSimple)); |
89 |
assertTrue(AreaReference.isContiguous(ref2D)); |
90 |
assertFalse(AreaReference.isContiguous(refDCSimple)); |
91 |
assertFalse(AreaReference.isContiguous(refDC2D)); |
92 |
assertFalse(AreaReference.isContiguous(refDC3D)); |
93 |
|
94 |
// Check we can only create contiguous entries |
95 |
new AreaReference(refSimple); |
96 |
new AreaReference(ref2D); |
97 |
try { |
98 |
new AreaReference(refDCSimple); |
99 |
fail(); |
100 |
} catch(IllegalArgumentException e) {} |
101 |
try { |
102 |
new AreaReference(refDC2D); |
103 |
fail(); |
104 |
} catch(IllegalArgumentException e) {} |
105 |
try { |
106 |
new AreaReference(refDC3D); |
107 |
fail(); |
108 |
} catch(IllegalArgumentException e) {} |
109 |
|
110 |
// Test that we split as expected |
111 |
AreaReference[] refs; |
112 |
|
113 |
refs = AreaReference.generateContiguous(refSimple); |
114 |
assertEquals(1, refs.length); |
115 |
assertEquals(1, refs[0].getDim()); |
116 |
assertEquals("$C$10", refs[0].toString()); |
117 |
|
118 |
refs = AreaReference.generateContiguous(ref2D); |
119 |
assertEquals(1, refs.length); |
120 |
assertEquals(2, refs[0].getDim()); |
121 |
assertEquals("$C$10:$D$11", refs[0].toString()); |
122 |
|
123 |
refs = AreaReference.generateContiguous(refDCSimple); |
124 |
assertEquals(3, refs.length); |
125 |
assertEquals(1, refs[0].getDim()); |
126 |
assertEquals(1, refs[1].getDim()); |
127 |
assertEquals(1, refs[2].getDim()); |
128 |
assertEquals("$C$10", refs[0].toString()); |
129 |
assertEquals("$D$12", refs[1].toString()); |
130 |
assertEquals("$E$14", refs[2].toString()); |
131 |
|
132 |
refs = AreaReference.generateContiguous(refDC2D); |
133 |
assertEquals(3, refs.length); |
134 |
assertEquals(2, refs[0].getDim()); |
135 |
assertEquals(1, refs[1].getDim()); |
136 |
assertEquals(2, refs[2].getDim()); |
137 |
assertEquals("$C$10:$C$11", refs[0].toString()); |
138 |
assertEquals("$D$12", refs[1].toString()); |
139 |
assertEquals("$E$14:$E$20", refs[2].toString()); |
140 |
|
141 |
refs = AreaReference.generateContiguous(refDC3D); |
142 |
assertEquals(2, refs.length); |
143 |
assertEquals(2, refs[0].getDim()); |
144 |
assertEquals(2, refs[1].getDim()); |
145 |
assertEquals("$C$10:$C$14", refs[0].toString()); |
146 |
assertEquals("$D$10:$D$12", refs[1].toString()); |
147 |
assertEquals("Tabelle1", refs[0].getCells()[0].getSheetName()); |
148 |
assertEquals("Tabelle1", refs[0].getCells()[1].getSheetName()); |
149 |
assertEquals("Tabelle1", refs[1].getCells()[0].getSheetName()); |
150 |
assertEquals("Tabelle1", refs[1].getCells()[1].getSheetName()); |
151 |
} |
152 |
|
153 |
public void testDiscontinousReference() throws Exception { |
154 |
String filename = System.getProperty( "HSSF.testdata.path" ); |
155 |
filename = filename + "/44167.xls"; |
156 |
FileInputStream fin = new FileInputStream( filename ); |
157 |
HSSFWB wb = new HSSFWB( fin ); |
158 |
Workbook workbook = wb.getWorkbook(); |
159 |
fin.close(); |
160 |
|
161 |
assertEquals(1, wb.getNumberOfNames()); |
162 |
String sheetName = "Tabelle1"; |
163 |
String rawRefA = "$C$10:$C$14"; |
164 |
String rawRefB = "$C$16:$C$18"; |
165 |
String refA = sheetName + "!" + rawRefA; |
166 |
String refB = sheetName + "!" + rawRefB; |
167 |
String ref = refA + "," + refB; |
168 |
|
169 |
// Check the low level record |
170 |
NameRecord nr = workbook.getNameRecord(0); |
171 |
assertNotNull(nr); |
172 |
assertEquals("test", nr.getNameText()); |
173 |
|
174 |
List def =nr.getNameDefinition(); |
175 |
assertEquals(4, def.size()); |
176 |
|
177 |
MemFuncPtg ptgA = (MemFuncPtg)def.get(0); |
178 |
Area3DPtg ptgB = (Area3DPtg)def.get(1); |
179 |
Area3DPtg ptgC = (Area3DPtg)def.get(2); |
180 |
UnionPtg ptgD = (UnionPtg)def.get(3); |
181 |
assertEquals("", ptgA.toFormulaString(workbook)); |
182 |
assertEquals(refA, ptgB.toFormulaString(workbook)); |
183 |
assertEquals(refB, ptgC.toFormulaString(workbook)); |
184 |
assertEquals(",", ptgD.toFormulaString(workbook)); |
185 |
|
186 |
assertEquals(ref, nr.getAreaReference(workbook)); |
187 |
|
188 |
// Check the high level definition |
189 |
int idx = wb.getNameIndex("test"); |
190 |
assertEquals(0, idx); |
191 |
HSSFName aNamedCell = wb.getNameAt(idx); |
192 |
|
193 |
// Should have 2 references |
194 |
assertEquals(ref, aNamedCell.getReference()); |
195 |
|
196 |
// Check the parsing of the reference into cells |
197 |
assertFalse(AreaReference.isContiguous(aNamedCell.getReference())); |
198 |
AreaReference[] arefs = AreaReference.generateContiguous(aNamedCell.getReference()); |
199 |
assertEquals(2, arefs.length); |
200 |
assertEquals(rawRefA, arefs[0].toString()); |
201 |
assertEquals(rawRefB, arefs[1].toString()); |
202 |
|
203 |
for(int i=0; i<arefs.length; i++) { |
204 |
CellReference[] crefs = arefs[i].getCells(); |
205 |
for (int j=0; j<crefs.length; j++) { |
206 |
// Check it turns into real stuff |
207 |
HSSFSheet s = wb.getSheet(crefs[j].getSheetName()); |
208 |
HSSFRow r = s.getRow(crefs[j].getRow()); |
209 |
HSSFCell c = r.getCell(crefs[j].getCol()); |
210 |
} |
211 |
} |
212 |
} |
63 |
|
213 |
|
64 |
public static void main(java.lang.String[] args) { |
214 |
public static void main(java.lang.String[] args) { |
65 |
junit.textui.TestRunner.run(TestAreaReference.class); |
215 |
junit.textui.TestRunner.run(TestAreaReference.class); |
66 |
} |
216 |
} |
67 |
|
217 |
|