Lines 18-23
Link Here
|
18 |
package org.apache.poi.hssf.record; |
18 |
package org.apache.poi.hssf.record; |
19 |
|
19 |
|
20 |
import org.apache.poi.util.LittleEndianOutput; |
20 |
import org.apache.poi.util.LittleEndianOutput; |
|
|
21 |
import org.apache.poi.util.POILogFactory; |
22 |
import org.apache.poi.util.POILogger; |
21 |
import org.apache.poi.util.StringUtil; |
23 |
import org.apache.poi.util.StringUtil; |
22 |
|
24 |
|
23 |
/** |
25 |
/** |
Lines 31-36
Link Here
|
31 |
*/ |
33 |
*/ |
32 |
public final class SupBookRecord extends StandardRecord { |
34 |
public final class SupBookRecord extends StandardRecord { |
33 |
|
35 |
|
|
|
36 |
private final static POILogger logger = POILogFactory.getLogger(SupBookRecord.class); |
37 |
|
34 |
public final static short sid = 0x01AE; |
38 |
public final static short sid = 0x01AE; |
35 |
|
39 |
|
36 |
private static final short SMALL_RECORD_SIZE = 4; |
40 |
private static final short SMALL_RECORD_SIZE = 4; |
Lines 42-47
Link Here
|
42 |
private String[] field_3_sheet_names; |
46 |
private String[] field_3_sheet_names; |
43 |
private boolean _isAddInFunctions; |
47 |
private boolean _isAddInFunctions; |
44 |
|
48 |
|
|
|
49 |
protected static final char CH_VOLUME = 1; |
50 |
protected static final char CH_SAME_VOLUME = 2; |
51 |
protected static final char CH_DOWN_DIR = 3; |
52 |
protected static final char CH_UP_DIR = 4; |
53 |
protected static final char CH_LONG_VOLUME = 5; |
54 |
protected static final char CH_STARTUP_DIR = 6; |
55 |
protected static final char CH_ALT_STARTUP_DIR = 7; |
56 |
protected static final char CH_LIB_DIR = 8; |
57 |
protected static final String PATH_SEPERATOR = System.getProperty("file.separator"); |
45 |
|
58 |
|
46 |
public static SupBookRecord createInternalReferences(short numberOfSheets) { |
59 |
public static SupBookRecord createInternalReferences(short numberOfSheets) { |
47 |
return new SupBookRecord(false, numberOfSheets); |
60 |
return new SupBookRecord(false, numberOfSheets); |
Lines 192-212
Link Here
|
192 |
return encodedUrl; |
205 |
return encodedUrl; |
193 |
} |
206 |
} |
194 |
private static String decodeFileName(String encodedUrl) { |
207 |
private static String decodeFileName(String encodedUrl) { |
195 |
return encodedUrl.substring(1); |
208 |
/* see "MICROSOFT OFFICE EXCEL 97-2007 BINARY FILE FORMAT SPECIFICATION" */ |
196 |
// TODO the following special characters may appear in the rest of the string, and need to get interpreted |
209 |
StringBuilder sb = new StringBuilder(); |
197 |
/* see "MICROSOFT OFFICE EXCEL 97-2007 BINARY FILE FORMAT SPECIFICATION" |
210 |
for(int i=1; i<encodedUrl.length(); i++) { |
198 |
chVolume 1 |
211 |
char c = encodedUrl.charAt(i); |
199 |
chSameVolume 2 |
212 |
switch (c) { |
200 |
chDownDir 3 |
213 |
case CH_VOLUME: |
201 |
chUpDir 4 |
214 |
char driveLetter = encodedUrl.charAt(++i); |
202 |
chLongVolume 5 |
215 |
if (driveLetter == '@') { |
203 |
chStartupDir 6 |
216 |
sb.append("\\\\"); |
204 |
chAltStartupDir 7 |
217 |
} else { |
205 |
chLibDir 8 |
218 |
//Windows notation for drive letters |
206 |
|
219 |
sb.append(driveLetter).append(":"); |
207 |
*/ |
220 |
} |
|
|
221 |
break; |
222 |
case CH_SAME_VOLUME: |
223 |
sb.append(PATH_SEPERATOR); |
224 |
break; |
225 |
case CH_DOWN_DIR: |
226 |
sb.append(PATH_SEPERATOR); |
227 |
break; |
228 |
case CH_UP_DIR: |
229 |
sb.append("..").append(PATH_SEPERATOR); |
230 |
break; |
231 |
case CH_LONG_VOLUME: |
232 |
//Don't known to handle... |
233 |
logger.log(POILogger.WARN, "Found unexpected key: ChLongVolume - IGNORING"); |
234 |
break; |
235 |
case CH_STARTUP_DIR: |
236 |
case CH_ALT_STARTUP_DIR: |
237 |
case CH_LIB_DIR: |
238 |
logger.log(POILogger.WARN, "EXCEL.EXE path unkown - using this directoy instead: ."); |
239 |
sb.append(".").append(PATH_SEPERATOR); |
240 |
break; |
241 |
default: |
242 |
sb.append(c); |
243 |
} |
244 |
} |
245 |
return sb.toString(); |
208 |
} |
246 |
} |
209 |
public String[] getSheetNames() { |
247 |
public String[] getSheetNames() { |
210 |
return field_3_sheet_names.clone(); |
248 |
return field_3_sheet_names.clone(); |
211 |
} |
249 |
} |
|
|
250 |
|
251 |
public void setURL(String pUrl) { |
252 |
//Keep the first marker character! |
253 |
field_2_encoded_url = field_2_encoded_url.substring(0, 1) + pUrl; |
254 |
} |
212 |
} |
255 |
} |