avik        2005/05/19 07:56:45

  Modified:    src/java/org/apache/poi/hssf/record NameRecord.java
               src/java/org/apache/poi/hssf/record/formula Ptg.java
               src/testcases/org/apache/poi/hssf/usermodel
                        TestFormulas.java
  Added:       src/java/org/apache/poi/hssf/record/formula
                        DeletedArea3DPtg.java DeletedRef3DPtg.java
               src/testcases/org/apache/poi/hssf/data 27272_1.xls
                        27272_2.xls
  Log:
  Fix for bug 27272 : Unknown Ptg 3C and 3D
  by Patrick Luby, thanks!
  
  Revision  Changes    Path
  1.19      +5 -2      
jakarta-poi/src/java/org/apache/poi/hssf/record/NameRecord.java
  
  Index: NameRecord.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/NameRecord.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- NameRecord.java   19 May 2005 14:32:46 -0000      1.18
  +++ NameRecord.java   19 May 2005 14:56:45 -0000      1.19
  @@ -23,6 +23,8 @@
   
   import org.apache.poi.hssf.model.Workbook;
   import org.apache.poi.hssf.record.formula.Area3DPtg;
  +import org.apache.poi.hssf.record.formula.DeletedArea3DPtg;
  +import org.apache.poi.hssf.record.formula.DeletedRef3DPtg;
   import org.apache.poi.hssf.record.formula.Ptg;
   import org.apache.poi.hssf.record.formula.Ref3DPtg;
   import org.apache.poi.hssf.util.RangeAddress;
  @@ -664,7 +666,7 @@
        * @return area reference
        */
       public String getAreaReference(Workbook book){
  -        if (field_13_name_definition == null || 
field_13_name_definition.isEmpty()) return "#REF!";
  +        if (field_13_name_definition == null || 
field_13_name_definition.isEmpty()) return "Error";
           Ptg ptg = (Ptg) field_13_name_definition.peek();
           String result = "";
   
  @@ -673,7 +675,8 @@
   
           } else if (ptg.getClass() == Ref3DPtg.class){
               result = ptg.toFormulaString(book);
  -        }
  +        } else if (ptg.getClass() == DeletedArea3DPtg.class || 
ptg.getClass() == DeletedRef3DPtg.class) {
  +             result = "#REF!"   ;     }
   
           return result;
       }
  
  
  
  1.37      +14 -0     
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ptg.java
  
  Index: Ptg.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/java/org/apache/poi/hssf/record/formula/Ptg.java,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- Ptg.java  2 Jan 2005 01:00:52 -0000       1.36
  +++ Ptg.java  19 May 2005 14:56:45 -0000      1.37
  @@ -260,6 +260,20 @@
                   retval = new Ref3DPtg(data, offset);
                   break;
                   
  +            case DeletedArea3DPtg.sid :      // 0x3c     
  +            case DeletedArea3DPtg.sid+0x20 : // 0x5c     
  +            case DeletedArea3DPtg.sid+0x40 : // 0x7c     
  +
  +                retval = new DeletedArea3DPtg(data, offset);
  +                break;
  +
  +            case DeletedRef3DPtg.sid:      // 0x3d      
  +            case DeletedRef3DPtg.sid+0x20: // 0x5d     
  +            case DeletedRef3DPtg.sid+0x40: // 0x7d     
  +
  +                retval = new DeletedRef3DPtg(data, offset);
  +                break;
  +                
               case MissingArgPtg.sid:
                   retval = new MissingArgPtg(data,offset);
                   break;
  
  
  
  1.1                  
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/DeletedArea3DPtg.java
  
  Index: DeletedArea3DPtg.java
  ===================================================================
  /* ====================================================================
     Copyright 2003-2005   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.record.formula;
  
  /**
   * Title:        Deleted Area 3D Ptg - 3D referecnce (Sheet + Area)<P>
   * Description:  Defined a area in Extern Sheet. <P>
   * REFERENCE:  <P>
   * @author Patrick Luby
   * @version 1.0-pre
   */
  
  public class DeletedArea3DPtg extends Area3DPtg
  {
        public final static byte sid = 0x3d;
  
      /** Creates new DeletedArea3DPtg */
      public DeletedArea3DPtg( String arearef, short externIdx )
      {
          super(arearef, externIdx);
      }
  
      public DeletedArea3DPtg( byte[] data, int offset )
      {
          super(data, offset);
      }
  }
  
  
  
  1.1                  
jakarta-poi/src/java/org/apache/poi/hssf/record/formula/DeletedRef3DPtg.java
  
  Index: DeletedRef3DPtg.java
  ===================================================================
  /* ====================================================================
     Copyright 2003-2005   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.record.formula;
  
  /**
   * Title:        Deleted Reference 3D Ptg <P>
   * Description:  Defined a cell in extern sheet. <P>
   * REFERENCE:  <P>
   * @author Patrick Luby
   * @version 1.0-pre
   */
  
  public class DeletedRef3DPtg extends Ref3DPtg {
      public final static byte sid  = 0x3c;
  
      /** Creates new DeletedRef3DPtg */
      public DeletedRef3DPtg(byte[] data, int offset) {
          super(data, offset);
      }
  
      public DeletedRef3DPtg(String cellref, short externIdx ) {
          super(cellref, externIdx);
      }
  }
  
  
  
  1.1                  
jakarta-poi/src/testcases/org/apache/poi/hssf/data/27272_1.xls
  
        <<Binary file>>
  
  
  1.1                  
jakarta-poi/src/testcases/org/apache/poi/hssf/data/27272_2.xls
  
        <<Binary file>>
  
  
  1.37      +26 -0     
jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java
  
  Index: TestFormulas.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-poi/src/testcases/org/apache/poi/hssf/usermodel/TestFormulas.java,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- TestFormulas.java 22 Apr 2005 13:12:14 -0000      1.36
  +++ TestFormulas.java 19 May 2005 14:56:45 -0000      1.37
  @@ -1094,6 +1094,32 @@
         File file = TempFile.createTempFile("testComplexSheetRefs",".xls");
         sb.write(new FileOutputStream(file));
       }
  +    
  +     /*Unknown Ptg 3C*/
  +     public void test27272_1() throws Exception {
  +             String readFilename = System.getProperty("HSSF.testdata.path"); 
  +             File inFile = new File(readFilename+"/27272_1.xls");
  +             FileInputStream in = new FileInputStream(inFile);
  +             HSSFWorkbook wb = new HSSFWorkbook(in);
  +             wb.getSheetAt(0);
  +             assertEquals("Reference for named range ", 
"#REF!",wb.getNameAt(0).getReference());
  +             File outF = File.createTempFile("bug27272_1",".xls");
  +             wb.write(new FileOutputStream(outF));
  +             System.out.println("Open "+outF.getAbsolutePath()+" in Excel");
  +     }
  +     /*Unknown Ptg 3D*/
  +     public void test27272_2() throws Exception {
  +             String readFilename = System.getProperty("HSSF.testdata.path"); 
  +             File inFile = new File(readFilename+"/27272_2.xls");
  +             FileInputStream in = new FileInputStream(inFile);
  +             HSSFWorkbook wb = new HSSFWorkbook(in);
  +             assertEquals("Reference for named range ", 
"#REF!",wb.getNameAt(0).getReference());
  +             File outF = File.createTempFile("bug27272_2",".xls");
  +             wb.write(new FileOutputStream(outF));
  +             System.out.println("Open "+outF.getAbsolutePath()+" in Excel");
  +     }
  +    
  +    
       public static void main(String [] args) {
           System.out
           .println("Testing org.apache.poi.hssf.usermodel.TestFormulas");
  
  
  

---------------------------------------------------------------------
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/

Reply via email to