first commit
This commit is contained in:
178
hrmsEjb/jxl/biff/formula/Area3d.java
Normal file
178
hrmsEjb/jxl/biff/formula/Area3d.java
Normal file
@@ -0,0 +1,178 @@
|
||||
package jxl.biff.formula;
|
||||
|
||||
import common.Assert;
|
||||
import common.Logger;
|
||||
import jxl.biff.CellReferenceHelper;
|
||||
import jxl.biff.IntegerHelper;
|
||||
|
||||
class Area3d extends Operand implements ParsedThing {
|
||||
private static Logger logger = Logger.getLogger(Area3d.class);
|
||||
|
||||
private int sheet;
|
||||
|
||||
private int columnFirst;
|
||||
|
||||
private int rowFirst;
|
||||
|
||||
private int columnLast;
|
||||
|
||||
private int rowLast;
|
||||
|
||||
private boolean columnFirstRelative;
|
||||
|
||||
private boolean rowFirstRelative;
|
||||
|
||||
private boolean columnLastRelative;
|
||||
|
||||
private boolean rowLastRelative;
|
||||
|
||||
private ExternalSheet workbook;
|
||||
|
||||
Area3d(ExternalSheet es) {
|
||||
this.workbook = es;
|
||||
}
|
||||
|
||||
Area3d(String s, ExternalSheet es) throws FormulaException {
|
||||
this.workbook = es;
|
||||
int seppos = s.lastIndexOf(":");
|
||||
Assert.verify((seppos != -1));
|
||||
String endcell = s.substring(seppos + 1);
|
||||
int sep = s.indexOf('!');
|
||||
String cellString = s.substring(sep + 1, seppos);
|
||||
this.columnFirst = CellReferenceHelper.getColumn(cellString);
|
||||
this.rowFirst = CellReferenceHelper.getRow(cellString);
|
||||
String sheetName = s.substring(0, sep);
|
||||
if (sheetName.charAt(0) == '\'' && sheetName.charAt(sheetName.length() - 1) == '\'')
|
||||
sheetName = sheetName.substring(1, sheetName.length() - 1);
|
||||
this.sheet = es.getExternalSheetIndex(sheetName);
|
||||
if (this.sheet < 0)
|
||||
throw new FormulaException(FormulaException.sheetRefNotFound, sheetName);
|
||||
this.columnLast = CellReferenceHelper.getColumn(endcell);
|
||||
this.rowLast = CellReferenceHelper.getRow(endcell);
|
||||
this.columnFirstRelative = true;
|
||||
this.rowFirstRelative = true;
|
||||
this.columnLastRelative = true;
|
||||
this.rowLastRelative = true;
|
||||
}
|
||||
|
||||
int getFirstColumn() {
|
||||
return this.columnFirst;
|
||||
}
|
||||
|
||||
int getFirstRow() {
|
||||
return this.rowFirst;
|
||||
}
|
||||
|
||||
int getLastColumn() {
|
||||
return this.columnLast;
|
||||
}
|
||||
|
||||
int getLastRow() {
|
||||
return this.rowLast;
|
||||
}
|
||||
|
||||
public int read(byte[] data, int pos) {
|
||||
this.sheet = IntegerHelper.getInt(data[pos], data[pos + 1]);
|
||||
this.rowFirst = IntegerHelper.getInt(data[pos + 2], data[pos + 3]);
|
||||
this.rowLast = IntegerHelper.getInt(data[pos + 4], data[pos + 5]);
|
||||
int columnMask = IntegerHelper.getInt(data[pos + 6], data[pos + 7]);
|
||||
this.columnFirst = columnMask & 0xFF;
|
||||
this.columnFirstRelative = ((columnMask & 0x4000) != 0);
|
||||
this.rowFirstRelative = ((columnMask & 0x8000) != 0);
|
||||
columnMask = IntegerHelper.getInt(data[pos + 8], data[pos + 9]);
|
||||
this.columnLast = columnMask & 0xFF;
|
||||
this.columnLastRelative = ((columnMask & 0x4000) != 0);
|
||||
this.rowLastRelative = ((columnMask & 0x8000) != 0);
|
||||
return 10;
|
||||
}
|
||||
|
||||
public void getString(StringBuffer buf) {
|
||||
CellReferenceHelper.getCellReference(this.sheet, this.columnFirst, this.rowFirst, this.workbook, buf);
|
||||
buf.append(':');
|
||||
CellReferenceHelper.getCellReference(this.columnLast, this.rowLast, buf);
|
||||
}
|
||||
|
||||
byte[] getBytes() {
|
||||
byte[] data = new byte[11];
|
||||
data[0] = Token.AREA3D.getCode();
|
||||
IntegerHelper.getTwoBytes(this.sheet, data, 1);
|
||||
IntegerHelper.getTwoBytes(this.rowFirst, data, 3);
|
||||
IntegerHelper.getTwoBytes(this.rowLast, data, 5);
|
||||
int grcol = this.columnFirst;
|
||||
if (this.rowFirstRelative)
|
||||
grcol |= 0x8000;
|
||||
if (this.columnFirstRelative)
|
||||
grcol |= 0x4000;
|
||||
IntegerHelper.getTwoBytes(grcol, data, 7);
|
||||
grcol = this.columnLast;
|
||||
if (this.rowLastRelative)
|
||||
grcol |= 0x8000;
|
||||
if (this.columnLastRelative)
|
||||
grcol |= 0x4000;
|
||||
IntegerHelper.getTwoBytes(grcol, data, 9);
|
||||
return data;
|
||||
}
|
||||
|
||||
public void adjustRelativeCellReferences(int colAdjust, int rowAdjust) {
|
||||
if (this.columnFirstRelative)
|
||||
this.columnFirst += colAdjust;
|
||||
if (this.columnLastRelative)
|
||||
this.columnLast += colAdjust;
|
||||
if (this.rowFirstRelative)
|
||||
this.rowFirst += rowAdjust;
|
||||
if (this.rowLastRelative)
|
||||
this.rowLast += rowAdjust;
|
||||
}
|
||||
|
||||
public void columnInserted(int sheetIndex, int col, boolean currentSheet) {
|
||||
if (sheetIndex != this.sheet)
|
||||
return;
|
||||
if (this.columnFirst >= col)
|
||||
this.columnFirst++;
|
||||
if (this.columnLast >= col)
|
||||
this.columnLast++;
|
||||
}
|
||||
|
||||
void columnRemoved(int sheetIndex, int col, boolean currentSheet) {
|
||||
if (sheetIndex != this.sheet)
|
||||
return;
|
||||
if (col < this.columnFirst)
|
||||
this.columnFirst--;
|
||||
if (col <= this.columnLast)
|
||||
this.columnLast--;
|
||||
}
|
||||
|
||||
void rowInserted(int sheetIndex, int row, boolean currentSheet) {
|
||||
if (sheetIndex != this.sheet)
|
||||
return;
|
||||
if (this.rowLast == 65535)
|
||||
return;
|
||||
if (row <= this.rowFirst)
|
||||
this.rowFirst++;
|
||||
if (row <= this.rowLast)
|
||||
this.rowLast++;
|
||||
}
|
||||
|
||||
void rowRemoved(int sheetIndex, int row, boolean currentSheet) {
|
||||
if (sheetIndex != this.sheet)
|
||||
return;
|
||||
if (this.rowLast == 65535)
|
||||
return;
|
||||
if (row < this.rowFirst)
|
||||
this.rowFirst--;
|
||||
if (row <= this.rowLast)
|
||||
this.rowLast--;
|
||||
}
|
||||
|
||||
protected void setRangeData(int sht, int colFirst, int colLast, int rwFirst, int rwLast, boolean colFirstRel, boolean colLastRel, boolean rowFirstRel, boolean rowLastRel) {
|
||||
this.sheet = sht;
|
||||
this.columnFirst = colFirst;
|
||||
this.columnLast = colLast;
|
||||
this.rowFirst = rwFirst;
|
||||
this.rowLast = rwLast;
|
||||
this.columnFirstRelative = colFirstRel;
|
||||
this.columnLastRelative = colLastRel;
|
||||
this.rowFirstRelative = rowFirstRel;
|
||||
this.rowLastRelative = rowLastRel;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user