Merged revisions 696501 via svnmerge from

https://svn.apache.org/repos/asf/poi/trunk

........
  r696501 | josh | 2008-09-17 15:35:09 -0700 (Wed, 17 Sep 2008) | 1 line

  Small tweak to NamePtg and Ref3DPtg
........


git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@696831 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Josh Micich 2008-09-18 22:13:01 +00:00
parent a6af3789b7
commit 7849dbc534
5 changed files with 18 additions and 38 deletions

View File

@ -319,7 +319,7 @@ public final class FormulaParser {
for(int i = 0; i < book.getNumberOfNames(); i++) { for(int i = 0; i < book.getNumberOfNames(); i++) {
// named range name matching is case insensitive // named range name matching is case insensitive
if(book.getNameAt(i).getNameName().equalsIgnoreCase(name)) { if(book.getNameAt(i).getNameName().equalsIgnoreCase(name)) {
return new NamePtg(name, book); return new NamePtg(i);
} }
} }
throw new FormulaParseException("Specified named range '" throw new FormulaParseException("Specified named range '"
@ -388,7 +388,7 @@ public final class FormulaParser {
// calls to user-defined functions within the workbook // calls to user-defined functions within the workbook
// get a Name token which points to a defined name record // get a Name token which points to a defined name record
nameToken = new NamePtg(name, this.book); nameToken = new NamePtg(nameIndex);
} else { } else {
if(book instanceof HSSFWorkbook) { if(book instanceof HSSFWorkbook) {
nameToken = ((HSSFWorkbook)book).getNameXPtg(name); nameToken = ((HSSFWorkbook)book).getNameXPtg(name);

View File

@ -447,7 +447,7 @@ public final class NameRecord extends Record {
/** gets the extern sheet number /** gets the extern sheet number
* @return extern sheet index * @return extern sheet index
*/ */
public short getExternSheetNumber(){ public int getExternSheetNumber(){
if (field_13_name_definition.length < 1) { if (field_13_name_definition.length < 1) {
return 0; return 0;
} }
@ -513,7 +513,7 @@ public final class NameRecord extends Record {
oldPtg = field_13_name_definition[0]; oldPtg = field_13_name_definition[0];
} }
List temp = new ArrayList(); List temp = new ArrayList();
short externSheetIndex = 0; int externSheetIndex = 0;
if (oldPtg.getClass() == Area3DPtg.class){ if (oldPtg.getClass() == Area3DPtg.class){
externSheetIndex = ((Area3DPtg) oldPtg).getExternSheetIndex(); externSheetIndex = ((Area3DPtg) oldPtg).getExternSheetIndex();

View File

@ -18,7 +18,6 @@
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.ss.usermodel.Name;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndian;
@ -31,33 +30,14 @@ public final class NamePtg extends OperandPtg {
public final static short sid = 0x23; public final static short sid = 0x23;
private final static int SIZE = 5; private final static int SIZE = 5;
/** one-based index to defined name record */ /** one-based index to defined name record */
private short field_1_label_index; private int field_1_label_index;
private short field_2_zero; // reserved must be 0 private short field_2_zero; // reserved must be 0
/** /**
* Creates new NamePtg and sets its name index to that of the corresponding defined name record * @param nameIndex zero-based index to name within workbook
* in the workbook. The search for the name record is case insensitive. If it is not found,
* it gets created.
*/ */
public NamePtg(String name, Workbook book) { public NamePtg(int nameIndex) {
field_1_label_index = (short)(1+getOrCreateNameRecord(book, name)); // convert to 1-based field_1_label_index = 1+nameIndex; // convert to 1-based
}
/**
* @return zero based index of the found or newly created defined name record.
*/
private static final int getOrCreateNameRecord(Workbook book, String name) {
// perhaps this logic belongs in Workbook?
int countNames = book.getNumberOfNames();
for (int i = 0; i < countNames; i++) {
if(name.equalsIgnoreCase( book.getNameName(i) )) {
return i;
}
}
Name nameObj = book.createName();
nameObj.setNameName(name);
return countNames;
} }
/** Creates new NamePtg */ /** Creates new NamePtg */
@ -75,9 +55,9 @@ public final class NamePtg extends OperandPtg {
} }
public void writeBytes(byte [] array, int offset) { public void writeBytes(byte [] array, int offset) {
array[offset+0]= (byte) (sid + getPtgClass()); LittleEndian.putByte(array, offset + 0, sid + getPtgClass());
LittleEndian.putShort(array,offset+1,field_1_label_index); LittleEndian.putUShort(array, offset + 1, field_1_label_index);
LittleEndian.putShort(array,offset+3, field_2_zero); LittleEndian.putUShort(array, offset + 3, field_2_zero);
} }
public int getSize() { public int getSize() {

View File

@ -44,7 +44,7 @@ public final class Ref3DPtg extends RefPtgBase {
readCoordinates(in); readCoordinates(in);
} }
public Ref3DPtg(String cellref, short externIdx ) { public Ref3DPtg(String cellref, int externIdx ) {
CellReference c= new CellReference(cellref); CellReference c= new CellReference(cellref);
setRow(c.getRow()); setRow(c.getRow());
setColumn(c.getCol()); setColumn(c.getCol());
@ -65,8 +65,8 @@ public final class Ref3DPtg extends RefPtgBase {
} }
public void writeBytes(byte [] array, int offset) { public void writeBytes(byte [] array, int offset) {
array[ 0 + offset ] = (byte) (sid + getPtgClass()); LittleEndian.putByte(array, 0 + offset, sid + getPtgClass());
LittleEndian.putShort(array, 1 + offset , getExternSheetIndex()); LittleEndian.putUShort(array, 1 + offset, getExternSheetIndex());
writeCoordinates(array, offset + 3); writeCoordinates(array, offset + 3);
} }
@ -74,8 +74,8 @@ public final class Ref3DPtg extends RefPtgBase {
return SIZE; return SIZE;
} }
public short getExternSheetIndex(){ public int getExternSheetIndex(){
return (short)field_1_index_extern_sheet; return field_1_index_extern_sheet;
} }
public void setExternSheetIndex(int index){ public void setExternSheetIndex(int index){

View File

@ -48,7 +48,7 @@ public class HSSFName implements Name {
* @return sheet name, which this named range referred to * @return sheet name, which this named range referred to
*/ */
public String getSheetName() { public String getSheetName() {
short indexToExternSheet = _definedNameRec.getExternSheetNumber(); int indexToExternSheet = _definedNameRec.getExternSheetNumber();
return _book.getWorkbook().findSheetNameFromExternSheet(indexToExternSheet); return _book.getWorkbook().findSheetNameFromExternSheet(indexToExternSheet);
} }