From 668c108b823998f753a958f3ca906d9e5042f826 Mon Sep 17 00:00:00 2001 From: Avik Sengupta Date: Thu, 19 May 2005 14:56:45 +0000 Subject: [PATCH] Fix for bug 27272 : Unknown Ptg 3C and 3D by Patrick Luby, thanks! PR: Obtained from: Submitted by: Reviewed by: git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353691 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hssf/record/NameRecord.java | 7 ++- .../hssf/record/formula/DeletedArea3DPtg.java | 41 ++++++++++++++++++ .../hssf/record/formula/DeletedRef3DPtg.java | 39 +++++++++++++++++ .../apache/poi/hssf/record/formula/Ptg.java | 14 ++++++ .../org/apache/poi/hssf/data/27272_1.xls | Bin 0 -> 13312 bytes .../org/apache/poi/hssf/data/27272_2.xls | Bin 0 -> 51712 bytes .../poi/hssf/usermodel/TestFormulas.java | 26 +++++++++++ 7 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 src/java/org/apache/poi/hssf/record/formula/DeletedArea3DPtg.java create mode 100644 src/java/org/apache/poi/hssf/record/formula/DeletedRef3DPtg.java create mode 100644 src/testcases/org/apache/poi/hssf/data/27272_1.xls create mode 100644 src/testcases/org/apache/poi/hssf/data/27272_2.xls diff --git a/src/java/org/apache/poi/hssf/record/NameRecord.java b/src/java/org/apache/poi/hssf/record/NameRecord.java index 9de03bc45..06277f202 100644 --- a/src/java/org/apache/poi/hssf/record/NameRecord.java +++ b/src/java/org/apache/poi/hssf/record/NameRecord.java @@ -23,6 +23,8 @@ import java.util.Stack; 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 @@ public class NameRecord extends Record { * @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 @@ public class NameRecord extends Record { } else if (ptg.getClass() == Ref3DPtg.class){ result = ptg.toFormulaString(book); - } + } else if (ptg.getClass() == DeletedArea3DPtg.class || ptg.getClass() == DeletedRef3DPtg.class) { + result = "#REF!" ; } return result; } diff --git a/src/java/org/apache/poi/hssf/record/formula/DeletedArea3DPtg.java b/src/java/org/apache/poi/hssf/record/formula/DeletedArea3DPtg.java new file mode 100644 index 000000000..5fe9de62d --- /dev/null +++ b/src/java/org/apache/poi/hssf/record/formula/DeletedArea3DPtg.java @@ -0,0 +1,41 @@ +/* ==================================================================== + 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)

+ * Description: Defined a area in Extern Sheet.

+ * REFERENCE:

+ * @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); + } +} diff --git a/src/java/org/apache/poi/hssf/record/formula/DeletedRef3DPtg.java b/src/java/org/apache/poi/hssf/record/formula/DeletedRef3DPtg.java new file mode 100644 index 000000000..d64b13abb --- /dev/null +++ b/src/java/org/apache/poi/hssf/record/formula/DeletedRef3DPtg.java @@ -0,0 +1,39 @@ +/* ==================================================================== + 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

+ * Description: Defined a cell in extern sheet.

+ * REFERENCE:

+ * @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); + } +} diff --git a/src/java/org/apache/poi/hssf/record/formula/Ptg.java b/src/java/org/apache/poi/hssf/record/formula/Ptg.java index 73355128f..668bc709d 100644 --- a/src/java/org/apache/poi/hssf/record/formula/Ptg.java +++ b/src/java/org/apache/poi/hssf/record/formula/Ptg.java @@ -260,6 +260,20 @@ public abstract class Ptg 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; diff --git a/src/testcases/org/apache/poi/hssf/data/27272_1.xls b/src/testcases/org/apache/poi/hssf/data/27272_1.xls new file mode 100644 index 0000000000000000000000000000000000000000..1715db85d389612e1097e01db6eb029879fcd0d8 GIT binary patch literal 13312 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 literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/data/27272_2.xls b/src/testcases/org/apache/poi/hssf/data/27272_2.xls new file mode 100644 index 0000000000000000000000000000000000000000..3e69928d551c31f9bfc467e01113b7c6eaaed235 GIT binary patch literal 51712 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