first commit
This commit is contained in:
102
hrmsEjb/jxl/biff/formula/CellReference.java
Normal file
102
hrmsEjb/jxl/biff/formula/CellReference.java
Normal file
@@ -0,0 +1,102 @@
|
||||
package jxl.biff.formula;
|
||||
|
||||
import common.Logger;
|
||||
import jxl.Cell;
|
||||
import jxl.biff.CellReferenceHelper;
|
||||
import jxl.biff.IntegerHelper;
|
||||
|
||||
class CellReference extends Operand implements ParsedThing {
|
||||
private static Logger logger = Logger.getLogger(CellReference.class);
|
||||
|
||||
private boolean columnRelative;
|
||||
|
||||
private boolean rowRelative;
|
||||
|
||||
private int column;
|
||||
|
||||
private int row;
|
||||
|
||||
private Cell relativeTo;
|
||||
|
||||
public CellReference(Cell rt) {
|
||||
this.relativeTo = rt;
|
||||
}
|
||||
|
||||
public CellReference() {}
|
||||
|
||||
public CellReference(String s) {
|
||||
this.column = CellReferenceHelper.getColumn(s);
|
||||
this.row = CellReferenceHelper.getRow(s);
|
||||
this.columnRelative = CellReferenceHelper.isColumnRelative(s);
|
||||
this.rowRelative = CellReferenceHelper.isRowRelative(s);
|
||||
}
|
||||
|
||||
public int read(byte[] data, int pos) {
|
||||
this.row = IntegerHelper.getInt(data[pos], data[pos + 1]);
|
||||
int columnMask = IntegerHelper.getInt(data[pos + 2], data[pos + 3]);
|
||||
this.column = columnMask & 0xFF;
|
||||
this.columnRelative = ((columnMask & 0x4000) != 0);
|
||||
this.rowRelative = ((columnMask & 0x8000) != 0);
|
||||
return 4;
|
||||
}
|
||||
|
||||
public int getColumn() {
|
||||
return this.column;
|
||||
}
|
||||
|
||||
public int getRow() {
|
||||
return this.row;
|
||||
}
|
||||
|
||||
public void getString(StringBuffer buf) {
|
||||
CellReferenceHelper.getCellReference(this.column, !this.columnRelative, this.row, !this.rowRelative, buf);
|
||||
}
|
||||
|
||||
byte[] getBytes() {
|
||||
byte[] data = new byte[5];
|
||||
data[0] = !useAlternateCode() ? Token.REF.getCode() : Token.REF.getCode2();
|
||||
IntegerHelper.getTwoBytes(this.row, data, 1);
|
||||
int grcol = this.column;
|
||||
if (this.rowRelative)
|
||||
grcol |= 0x8000;
|
||||
if (this.columnRelative)
|
||||
grcol |= 0x4000;
|
||||
IntegerHelper.getTwoBytes(grcol, data, 3);
|
||||
return data;
|
||||
}
|
||||
|
||||
public void adjustRelativeCellReferences(int colAdjust, int rowAdjust) {
|
||||
if (this.columnRelative)
|
||||
this.column += colAdjust;
|
||||
if (this.rowRelative)
|
||||
this.row += rowAdjust;
|
||||
}
|
||||
|
||||
public void columnInserted(int sheetIndex, int col, boolean currentSheet) {
|
||||
if (!currentSheet)
|
||||
return;
|
||||
if (this.column >= col)
|
||||
this.column++;
|
||||
}
|
||||
|
||||
void columnRemoved(int sheetIndex, int col, boolean currentSheet) {
|
||||
if (!currentSheet)
|
||||
return;
|
||||
if (this.column >= col)
|
||||
this.column--;
|
||||
}
|
||||
|
||||
void rowInserted(int sheetIndex, int r, boolean currentSheet) {
|
||||
if (!currentSheet)
|
||||
return;
|
||||
if (this.row >= r)
|
||||
this.row++;
|
||||
}
|
||||
|
||||
void rowRemoved(int sheetIndex, int r, boolean currentSheet) {
|
||||
if (!currentSheet)
|
||||
return;
|
||||
if (this.row >= r)
|
||||
this.row--;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user