60 lines
1.5 KiB
Java
60 lines
1.5 KiB
Java
package jxl.biff.formula;
|
|
|
|
import jxl.Cell;
|
|
import jxl.biff.CellReferenceHelper;
|
|
import jxl.biff.IntegerHelper;
|
|
|
|
class SharedFormulaCellReference extends Operand implements ParsedThing {
|
|
private boolean columnRelative;
|
|
|
|
private boolean rowRelative;
|
|
|
|
private int column;
|
|
|
|
private int row;
|
|
|
|
private Cell relativeTo;
|
|
|
|
public SharedFormulaCellReference(Cell rt) {
|
|
this.relativeTo = rt;
|
|
}
|
|
|
|
public int read(byte[] data, int pos) {
|
|
this.row = IntegerHelper.getShort(data[pos], data[pos + 1]);
|
|
int columnMask = IntegerHelper.getInt(data[pos + 2], data[pos + 3]);
|
|
this.column = (byte)(columnMask & 0xFF);
|
|
this.columnRelative = ((columnMask & 0x4000) != 0);
|
|
this.rowRelative = ((columnMask & 0x8000) != 0);
|
|
if (this.columnRelative)
|
|
this.column = this.relativeTo.getColumn() + this.column;
|
|
if (this.rowRelative)
|
|
this.row = this.relativeTo.getRow() + this.row;
|
|
return 4;
|
|
}
|
|
|
|
public int getColumn() {
|
|
return this.column;
|
|
}
|
|
|
|
public int getRow() {
|
|
return this.row;
|
|
}
|
|
|
|
public void getString(StringBuffer buf) {
|
|
CellReferenceHelper.getCellReference(this.column, this.row, buf);
|
|
}
|
|
|
|
byte[] getBytes() {
|
|
byte[] data = new byte[5];
|
|
data[0] = Token.REF.getCode();
|
|
IntegerHelper.getTwoBytes(this.row, data, 1);
|
|
int columnMask = this.column;
|
|
if (this.columnRelative)
|
|
columnMask |= 0x4000;
|
|
if (this.rowRelative)
|
|
columnMask |= 0x8000;
|
|
IntegerHelper.getTwoBytes(columnMask, data, 3);
|
|
return data;
|
|
}
|
|
}
|