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: [EMAIL PROTECTED] Mailing List: http://jakarta.apache.org/site/mail2.html#poi The Apache Jakarta POI Project: http://jakarta.apache.org/poi/