Fix for bug 30978 - small re-arrangement of class Ptg hierarchy for DeletedRef3DPtg and DeletedArea3DPtg. Similar to c664220
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@669809 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
c02655d884
commit
6527e63ed1
@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
<!-- Don't forget to update status.xml too! -->
|
<!-- Don't forget to update status.xml too! -->
|
||||||
<release version="3.1-final" date="2008-06-??">
|
<release version="3.1-final" date="2008-06-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">30978 - Fixed re-serialization of tRefErr3d and tAreaErr3d</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">45234 - Removed incorrect shared formula conversion in CFRuleRecord</action>
|
<action dev="POI-DEVELOPERS" type="fix">45234 - Removed incorrect shared formula conversion in CFRuleRecord</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">45001 - Improved HWPF Range.replaceText()</action>
|
<action dev="POI-DEVELOPERS" type="fix">45001 - Improved HWPF Range.replaceText()</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44692 - Fixed HSSFPicture.resize() to properly resize pictures if the underlying columns/rows have modified size</action>
|
<action dev="POI-DEVELOPERS" type="fix">44692 - Fixed HSSFPicture.resize() to properly resize pictures if the underlying columns/rows have modified size</action>
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
<!-- Don't forget to update changes.xml too! -->
|
<!-- Don't forget to update changes.xml too! -->
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.1-final" date="2008-06-??">
|
<release version="3.1-final" date="2008-06-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">30978 - Fixed re-serialization of tRefErr3d and tAreaErr3d</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">45234 - Removed incorrect shared formula conversion in CFRuleRecord</action>
|
<action dev="POI-DEVELOPERS" type="fix">45234 - Removed incorrect shared formula conversion in CFRuleRecord</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">45001 - Improved HWPF Range.replaceText()</action>
|
<action dev="POI-DEVELOPERS" type="fix">45001 - Improved HWPF Range.replaceText()</action>
|
||||||
<action dev="POI-DEVELOPERS" type="fix">44692 - Fixed HSSFPicture.resize() to properly resize pictures if the underlying columns/rows have modified size</action>
|
<action dev="POI-DEVELOPERS" type="fix">44692 - Fixed HSSFPicture.resize() to properly resize pictures if the underlying columns/rows have modified size</action>
|
||||||
|
@ -15,16 +15,14 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
==================================================================== */
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
package org.apache.poi.hssf.record;
|
package org.apache.poi.hssf.record;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
|
import org.apache.poi.hssf.model.FormulaParser;
|
||||||
import org.apache.poi.hssf.record.formula.Area3DPtg;
|
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.Ptg;
|
||||||
import org.apache.poi.hssf.record.formula.Ref3DPtg;
|
import org.apache.poi.hssf.record.formula.Ref3DPtg;
|
||||||
import org.apache.poi.hssf.record.formula.UnionPtg;
|
import org.apache.poi.hssf.record.formula.UnionPtg;
|
||||||
@ -44,8 +42,7 @@ import org.apache.poi.util.StringUtil;
|
|||||||
* @author Glen Stampoultzis (glens at apache.org)
|
* @author Glen Stampoultzis (glens at apache.org)
|
||||||
* @version 1.0-pre
|
* @version 1.0-pre
|
||||||
*/
|
*/
|
||||||
|
public final class NameRecord extends Record {
|
||||||
public class NameRecord extends Record {
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
public final static short sid = 0x18; //Docs says that it is 0x218
|
public final static short sid = 0x18; //Docs says that it is 0x218
|
||||||
@ -651,48 +648,7 @@ public class NameRecord extends Record {
|
|||||||
* @return area reference
|
* @return area reference
|
||||||
*/
|
*/
|
||||||
public String getAreaReference(HSSFWorkbook book){
|
public String getAreaReference(HSSFWorkbook book){
|
||||||
if (field_13_name_definition == null || field_13_name_definition.isEmpty()) return "Error";
|
return FormulaParser.toFormulaString(book, field_13_name_definition);
|
||||||
Ptg ptg = (Ptg) field_13_name_definition.peek();
|
|
||||||
String result = "";
|
|
||||||
|
|
||||||
// If it's a union, descend in and process
|
|
||||||
if (ptg.getClass() == UnionPtg.class) {
|
|
||||||
Iterator it =field_13_name_definition.iterator();
|
|
||||||
while( it.hasNext() ) {
|
|
||||||
Ptg p = (Ptg)it.next();
|
|
||||||
|
|
||||||
String thisRes = getAreaRefString(p, book);
|
|
||||||
if(thisRes.length() > 0) {
|
|
||||||
// Add a comma to the end if needed
|
|
||||||
if(result.length() > 0 && !result.endsWith(",")) {
|
|
||||||
result += ",";
|
|
||||||
}
|
|
||||||
// And add the string it corresponds to
|
|
||||||
result += thisRes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Otherwise just get the string
|
|
||||||
result = getAreaRefString(ptg, book);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Turn the given ptg into a string, or
|
|
||||||
* return an empty string if nothing is possible
|
|
||||||
* for it.
|
|
||||||
*/
|
|
||||||
private String getAreaRefString(Ptg ptg,HSSFWorkbook book) {
|
|
||||||
if (ptg.getClass() == Area3DPtg.class){
|
|
||||||
return ptg.toFormulaString(book);
|
|
||||||
} else if (ptg.getClass() == Ref3DPtg.class){
|
|
||||||
return ptg.toFormulaString(book);
|
|
||||||
} else if (ptg.getClass() == DeletedArea3DPtg.class || ptg.getClass() == DeletedRef3DPtg.class) {
|
|
||||||
return "#REF!";
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** sets the reference , the area only (range)
|
/** sets the reference , the area only (range)
|
||||||
|
@ -35,7 +35,7 @@ import org.apache.poi.util.LittleEndian;
|
|||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
* @version 1.0-pre
|
* @version 1.0-pre
|
||||||
*/
|
*/
|
||||||
public class Area3DPtg extends OperandPtg implements AreaI {
|
public final class Area3DPtg extends OperandPtg implements AreaI {
|
||||||
public final static byte sid = 0x3b;
|
public final static byte sid = 0x3b;
|
||||||
private final static int SIZE = 11; // 10 + 1 for Ptg
|
private final static int SIZE = 11; // 10 + 1 for Ptg
|
||||||
private short field_1_index_extern_sheet;
|
private short field_1_index_extern_sheet;
|
||||||
|
@ -18,6 +18,9 @@
|
|||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Title: Deleted Area 3D Ptg - 3D referecnce (Sheet + Area)<P>
|
* Title: Deleted Area 3D Ptg - 3D referecnce (Sheet + Area)<P>
|
||||||
@ -26,19 +29,30 @@ import org.apache.poi.hssf.record.RecordInputStream;
|
|||||||
* @author Patrick Luby
|
* @author Patrick Luby
|
||||||
* @version 1.0-pre
|
* @version 1.0-pre
|
||||||
*/
|
*/
|
||||||
|
public final class DeletedArea3DPtg extends OperandPtg {
|
||||||
public class DeletedArea3DPtg extends Area3DPtg
|
|
||||||
{
|
|
||||||
public final static byte sid = 0x3d;
|
public final static byte sid = 0x3d;
|
||||||
|
private final int field_1_index_extern_sheet;
|
||||||
|
private final int unused1;
|
||||||
|
private final int unused2;
|
||||||
|
|
||||||
/** Creates new DeletedArea3DPtg */
|
public DeletedArea3DPtg( RecordInputStream in) {
|
||||||
public DeletedArea3DPtg( String arearef, short externIdx )
|
field_1_index_extern_sheet = in.readUShort();
|
||||||
{
|
unused1 = in.readInt();
|
||||||
super(arearef, externIdx);
|
unused2 = in.readInt();
|
||||||
}
|
}
|
||||||
|
public String toFormulaString(HSSFWorkbook book) {
|
||||||
public DeletedArea3DPtg( RecordInputStream in)
|
return HSSFErrorConstants.getText(HSSFErrorConstants.ERROR_REF);
|
||||||
{
|
}
|
||||||
super(in);
|
public byte getDefaultOperandClass() {
|
||||||
|
return Ptg.CLASS_REF;
|
||||||
|
}
|
||||||
|
public int getSize() {
|
||||||
|
return 11;
|
||||||
|
}
|
||||||
|
public void writeBytes(byte[] data, int offset) {
|
||||||
|
LittleEndian.putByte(data, 0 + offset, sid + getPtgClass());
|
||||||
|
LittleEndian.putUShort(data, 1 + offset, field_1_index_extern_sheet);
|
||||||
|
LittleEndian.putInt(data, 3 + offset, unused1);
|
||||||
|
LittleEndian.putInt(data, 7 + offset, unused2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,11 +15,13 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
==================================================================== */
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
package org.apache.poi.hssf.record.formula;
|
package org.apache.poi.hssf.record.formula;
|
||||||
|
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.RecordInputStream;
|
import org.apache.poi.hssf.record.RecordInputStream;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
import org.apache.poi.util.LittleEndian;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Title: Deleted Reference 3D Ptg <P>
|
* Title: Deleted Reference 3D Ptg <P>
|
||||||
@ -28,16 +30,29 @@ import org.apache.poi.hssf.record.RecordInputStream;
|
|||||||
* @author Patrick Luby
|
* @author Patrick Luby
|
||||||
* @version 1.0-pre
|
* @version 1.0-pre
|
||||||
*/
|
*/
|
||||||
|
public final class DeletedRef3DPtg extends OperandPtg {
|
||||||
public class DeletedRef3DPtg extends Ref3DPtg {
|
|
||||||
public final static byte sid = 0x3c;
|
public final static byte sid = 0x3c;
|
||||||
|
private final int field_1_index_extern_sheet;
|
||||||
|
private final int unused1;
|
||||||
|
|
||||||
/** Creates new DeletedRef3DPtg */
|
/** Creates new DeletedRef3DPtg */
|
||||||
public DeletedRef3DPtg(RecordInputStream in) {
|
public DeletedRef3DPtg(RecordInputStream in) {
|
||||||
super(in);
|
field_1_index_extern_sheet = in.readUShort();
|
||||||
|
unused1 = in.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeletedRef3DPtg(String cellref, short externIdx ) {
|
public String toFormulaString(HSSFWorkbook book) {
|
||||||
super(cellref, externIdx);
|
return HSSFErrorConstants.getText(HSSFErrorConstants.ERROR_REF);
|
||||||
|
}
|
||||||
|
public byte getDefaultOperandClass() {
|
||||||
|
return Ptg.CLASS_REF;
|
||||||
|
}
|
||||||
|
public int getSize() {
|
||||||
|
return 7;
|
||||||
|
}
|
||||||
|
public void writeBytes(byte[] data, int offset) {
|
||||||
|
LittleEndian.putByte(data, 0 + offset, sid + getPtgClass());
|
||||||
|
LittleEndian.putUShort(data, 1 + offset, field_1_index_extern_sheet);
|
||||||
|
LittleEndian.putInt(data, 3 + offset, unused1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ import org.apache.poi.util.LittleEndian;
|
|||||||
* @author Jason Height (jheight at chariot dot net dot au)
|
* @author Jason Height (jheight at chariot dot net dot au)
|
||||||
* @version 1.0-pre
|
* @version 1.0-pre
|
||||||
*/
|
*/
|
||||||
public class Ref3DPtg extends OperandPtg {
|
public final class Ref3DPtg extends OperandPtg {
|
||||||
public final static byte sid = 0x3a;
|
public final static byte sid = 0x3a;
|
||||||
private final static int SIZE = 7; // 6 + 1 for Ptg
|
private final static int SIZE = 7; // 6 + 1 for Ptg
|
||||||
private short field_1_index_extern_sheet;
|
private short field_1_index_extern_sheet;
|
||||||
|
@ -999,7 +999,7 @@ public final class TestBugs extends TestCase {
|
|||||||
* used for printing stuff.
|
* used for printing stuff.
|
||||||
* Currently broken, as we change the Ptg
|
* Currently broken, as we change the Ptg
|
||||||
*/
|
*/
|
||||||
public void BROKENtest30978() throws Exception {
|
public void test30978() throws Exception {
|
||||||
HSSFWorkbook wb = openSample("30978-alt.xls");
|
HSSFWorkbook wb = openSample("30978-alt.xls");
|
||||||
assertEquals(1, wb.getNumberOfNames());
|
assertEquals(1, wb.getNumberOfNames());
|
||||||
assertEquals(3, wb.getNumberOfSheets());
|
assertEquals(3, wb.getNumberOfSheets());
|
||||||
|
Loading…
Reference in New Issue
Block a user