--- /dev/null
+
+/* ====================================================================
+ Copyright 2002-2004 Apache Software Foundation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+
+package org.apache.poi.hssf.usermodel.examples;
+
+import org.apache.poi.hssf.usermodel.*;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Test if hyperlink formula, with url that got more than 127 charaters, works
+ *
+ * @author Bernard Chesnoy
+ */
+public class HyperlinkFormula
+{
+ public static void main(String[] args)
+ throws IOException
+ {
+ HSSFCell cell;
+
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet("new sheet");
+ HSSFRow row = sheet.createRow((short) 0);
+
+ cell = row.createCell((short)0);
+ cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
+ cell.setCellFormula("HYPERLINK(\"http://127.0.0.1:8080/toto/truc/index.html?test=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\", \"test\")");
+
+ FileOutputStream fileOut = new FileOutputStream("workbook.xls");
+ wb.write(fileOut);
+ fileOut.close();
+
+ }
+}
* Stores a String value in a formula value stored in the format <length 2 bytes>char[]
* @author Werner Froidevaux
* @author Jason Height (jheight at chariot dot net dot au)
+ * @author Bernard Chesnoy
*/
public class StringPtg
public final static byte sid = 0x17;
//NOTE: OO doc says 16bit lenght, but BiffViewer says 8
// Book says something totally different, so dont look there!
- byte field_1_length;
+ int field_1_length;
byte field_2_options;
BitField fHighByte = new BitField(0x01);
private String field_3_string;
public StringPtg(byte [] data, int offset)
{
offset++;
- field_1_length = data[offset];
+ field_1_length = data[offset] & 0xFF;
field_2_options = data[offset+1];
if (fHighByte.isSet(field_2_options)) {
- field_3_string= StringUtil.getFromUnicodeBE(data,offset+2,field_1_length);
+ field_3_string= StringUtil.getFromUnicodeLE(data,offset+2,field_1_length);
}else {
field_3_string=StringUtil.getFromCompressedUnicode(data,offset+2,field_1_length);
}
-
+
//setValue(new String(data, offset+3, data[offset+1] + 256*data[offset+2]));
}
this.field_2_options=0;
this.fHighByte.setBoolean(field_2_options, false);
this.field_3_string=value;
- this.field_1_length=(byte)value.length(); //for the moment, we support only ASCII strings in formulas we create
+ this.field_1_length=value.length(); //for the moment, we support only ASCII strings in formulas we create
}
/*
public void writeBytes(byte [] array, int offset)
{
array[ offset + 0 ] = sid;
- array[ offset + 1 ] = field_1_length;
+ array[ offset + 1 ] = (byte)field_1_length;
array[ offset + 2 ] = field_2_options;
if (fHighByte.isSet(field_2_options)) {
StringUtil.putUnicodeLE(getValue(),array,offset+3);
{
if (fHighByte.isSet(field_2_options)) {
return 2*field_1_length+3;
- }else {
+ } else {
return field_1_length+3;
}
}
}
}
+