]> source.dussan.org Git - poi.git/commitdiff
Bugzilla Bug 29976 [PATCH] HSSF hyperlink formula size problem
authorGlen Stampoultzis <glens@apache.org>
Thu, 26 Aug 2004 03:17:56 +0000 (03:17 +0000)
committerGlen Stampoultzis <glens@apache.org>
Thu, 26 Aug 2004 03:17:56 +0000 (03:17 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353589 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/examples/src/org/apache/poi/hssf/usermodel/examples/HyperlinkFormula.java [new file with mode: 0644]
src/java/org/apache/poi/hssf/record/formula/StringPtg.java

index 000cf9cadb86053f0e17c8a15bee80012185e846..8f4ffbf828ebb8fb2285e0bb7e95a1b7f016966a 100644 (file)
 
     <changes>
 
+        <release version="unreleased" date="???">
+            <action dev="POI-DEVELOPERS" type="fix" context="All">Bugzilla Bug 29976 [PATCH] HSSF hyperlink formula size problem</action>
+        </release>
         <release version="2.5.1-FINAL" date="29 Feburary 2004">
             <action dev="POI-DEVELOPERS" type="add" context="All">Outlining support</action>
             <action dev="POI-DEVELOPERS" type="fix" context="All">27574 - [PATCH] HSSFDateUtil.getExcelDate() is one hour off when DST changes</action>
diff --git a/src/examples/src/org/apache/poi/hssf/usermodel/examples/HyperlinkFormula.java b/src/examples/src/org/apache/poi/hssf/usermodel/examples/HyperlinkFormula.java
new file mode 100644 (file)
index 0000000..1df386c
--- /dev/null
@@ -0,0 +1,51 @@
+
+/* ====================================================================
+   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();
+
+    }
+}
index 18da5f5d9f86ec63a3d59aa312e14ace5e19b6e0..35e71198c8657686c8fab725466d7ab91077cc37 100644 (file)
@@ -25,6 +25,7 @@ import org.apache.poi.util.StringUtil;
  * 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
@@ -34,7 +35,7 @@ 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;
@@ -47,14 +48,14 @@ public class StringPtg
     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]));
     }
 
@@ -70,7 +71,7 @@ public class StringPtg
         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
     }
 
     /*
@@ -88,7 +89,7 @@ public class StringPtg
     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);
@@ -101,7 +102,7 @@ public class StringPtg
     {
         if (fHighByte.isSet(field_2_options)) {
             return 2*field_1_length+3;
-        }else {
+        } else {
             return field_1_length+3;
         }
     }
@@ -123,3 +124,4 @@ public class StringPtg
    }
 
 }
+