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/