You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by jh...@apache.org on 2006/08/26 10:23:23 UTC

svn commit: r437126 - in /jakarta/poi/trunk/src: java/org/apache/poi/hssf/record/ java/org/apache/poi/hssf/record/aggregates/ scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/

Author: jheight
Date: Sat Aug 26 01:23:22 2006
New Revision: 437126

URL: http://svn.apache.org/viewvc?rev=437126&view=rev
Log:
Found a case where the shared formula does not resolve. This was in the test case for the org.apache.poi.hssf.record.formula.eval.TextEverything

Modified:
    jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordInputStream.java
    jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java
    jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/GenericFormulaTestCase.java

Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordInputStream.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordInputStream.java?rev=437126&r1=437125&r2=437126&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordInputStream.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordInputStream.java Sat Aug 26 01:23:22 2006
@@ -95,7 +95,7 @@
   
   public void nextRecord() throws RecordFormatException {
     if ((currentLength != -1) && (currentLength != recordOffset)) {
-      System.out.println("WARN. Unread "+remaining()+" bytes of record "+Integer.toHexString(currentSid));
+      System.out.println("WARN. Unread "+remaining()+" bytes of record 0x"+Integer.toHexString(currentSid));
     }
     currentSid = nextSid;
     pos += LittleEndian.SHORT_SIZE;
@@ -111,7 +111,7 @@
       //Read the Sid of the next record
       nextSid = LittleEndian.readShort(in);
     } catch (IOException ex) {
-      throw new RecordFormatException("Error reading bytes");
+      throw new RecordFormatException("Error reading bytes", ex);
     }
   }
   
@@ -226,7 +226,7 @@
    *      length)     
    */  
   public String readUnicodeLEString(int length) {
-    if ((length < 0) || ((remaining() / 2) < length)) {
+    if ((length < 0) || (((remaining() / 2) < length) && !isContinueNext())) {
             throw new IllegalArgumentException("Illegal length");
     }
     
@@ -239,7 +239,7 @@
     }
     return buf.toString();
   }
-  
+    
   public String readCompressedUnicode(int length) {
     if ((length < 0) || (remaining() < length)) {
             throw new IllegalArgumentException("Illegal length");
@@ -258,10 +258,20 @@
     return buf.toString();    
   }
   
+  /** Returns an excel style unicode string from the bytes reminaing in the record.
+   * <i>Note:</i> Unicode strings differ from <b>normal</b> strings due to the addition of
+   * formatting information.
+   * 
+   * @return The unicode string representation of the remaining bytes.
+   */
   public UnicodeString readUnicodeString() {
     return new UnicodeString(this);
   }
   
+  /** Returns the remaining bytes for the current record.
+   * 
+   * @return The remaining bytes of the current record.
+   */
   public byte[] readRemainder() {
     int size = remaining();
     byte[] result = new byte[size];
@@ -293,10 +303,18 @@
     return out.toByteArray();
   }
 
+  /** The remaining number of bytes in the <i>current</i> record.
+   * 
+   * @return The number of bytes remaining in the current record
+   */
   public int remaining() {
     return (currentLength - recordOffset);
   }
 
+  /** Returns true iif a Continue record is next in the excel stream 
+   * 
+   * @return True when a ContinueRecord is next.
+   */
   public boolean isContinueNext() {
     return (nextSid == ContinueRecord.sid);
   }

Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java?rev=437126&r1=437125&r2=437126&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java Sat Aug 26 01:23:22 2006
@@ -154,28 +154,14 @@
                 	if (shrd.isFormulaInShared(formula)) {
                 		shrd.convertSharedFormulaRecord(formula);
                 		found = true;
+                		break;
                 	}
                 }
-                if (!found)
-                	throw new RecordFormatException("Could not find appropriate shared formula");
-/*                	
-                
-                if ((lastSharedFormula != null) && (lastSharedFormula.isFormulaInShared(formula))) {
-                  //Convert this Formula Record from a shared formula to a real formula
-                  lastSharedFormula.convertSharedFormulaRecord(formula);
-                } else {                  
-                  if (nextRecord instanceof SharedFormulaRecord) {
-                	  //Handle the SharedFormulaRecord and move on.
-                    k++;
-                    lastSharedFormula = (SharedFormulaRecord) nextRecord;
-
-                    //Convert this Formula Record from a shared formula to a real formula
-                    lastSharedFormula.convertSharedFormulaRecord(formula);
-                  }
-                  else
-                    throw new RuntimeException(
-                        "Shared formula bit set but next record is not a Shared Formula??");
-                }*/
+                if (!found) {
+                	//Sometimes the shared formula flag "seems" to be errornously set,
+                	//cant really do much about that.
+                	//throw new RecordFormatException("Could not find appropriate shared formula");
+                }
               }
             	
               lastFormulaAggregate = new FormulaRecordAggregate((FormulaRecord)rec, null);

Modified: jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/GenericFormulaTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/GenericFormulaTestCase.java?rev=437126&r1=437125&r2=437126&view=diff
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/GenericFormulaTestCase.java (original)
+++ jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hssf/record/formula/eval/GenericFormulaTestCase.java Sat Aug 26 01:23:22 2006
@@ -23,18 +23,10 @@
  */
 public class GenericFormulaTestCase extends TestCase {
 
-    protected static final String FILENAME = System.getProperty("HSSF.testdata.path")+ "/FormulaEvalTestData.xls";
+    protected final String FILENAME = System.getProperty("HSSF.testdata.path")+ "/FormulaEvalTestData.xls";
+
+    protected HSSFWorkbook workbook = null;
 
-    protected static HSSFWorkbook workbook = null;
-    
-    static {
-        try {
-            FileInputStream fin = new FileInputStream( FILENAME );
-            workbook = new HSSFWorkbook( fin );
-            fin.close();
-            }
-            catch (Exception e) {e.printStackTrace();}
-    }
     protected CellReference beginCell;
     protected int getBeginRow() {
         return beginCell.getRow();
@@ -98,11 +90,14 @@
     }
 
     public GenericFormulaTestCase(String beginCell) {
-        super("genericTest");
+        super("genericTest");      
         this.beginCell = new CellReference(beginCell);
     }
     
-    public void setUp() {
+    public void setUp() throws Exception {
+        FileInputStream fin = new FileInputStream( FILENAME );
+        workbook = new HSSFWorkbook( fin );
+        fin.close();    	
     }
     
     public void genericTest() throws Exception {



---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List:    http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/