95 lines
2.9 KiB
Java
95 lines
2.9 KiB
Java
package jxl.read.biff;
|
|
|
|
import common.Logger;
|
|
import java.text.NumberFormat;
|
|
import java.util.ArrayList;
|
|
import jxl.Cell;
|
|
import jxl.CellType;
|
|
import jxl.biff.FormattingRecords;
|
|
import jxl.biff.IntegerHelper;
|
|
import jxl.biff.WorkbookMethods;
|
|
import jxl.biff.formula.ExternalSheet;
|
|
|
|
class SharedFormulaRecord {
|
|
private static Logger logger = Logger.getLogger(SharedFormulaRecord.class);
|
|
|
|
private int firstRow;
|
|
|
|
private int lastRow;
|
|
|
|
private int firstCol;
|
|
|
|
private int lastCol;
|
|
|
|
private BaseSharedFormulaRecord templateFormula;
|
|
|
|
private ArrayList formulas;
|
|
|
|
private byte[] tokens;
|
|
|
|
private ExternalSheet externalSheet;
|
|
|
|
private SheetImpl sheet;
|
|
|
|
public SharedFormulaRecord(Record t, BaseSharedFormulaRecord fr, ExternalSheet es, WorkbookMethods nt, SheetImpl si) {
|
|
this.sheet = si;
|
|
byte[] data = t.getData();
|
|
this.firstRow = IntegerHelper.getInt(data[0], data[1]);
|
|
this.lastRow = IntegerHelper.getInt(data[2], data[3]);
|
|
this.firstCol = data[4] & 0xFF;
|
|
this.lastCol = data[5] & 0xFF;
|
|
this.formulas = new ArrayList();
|
|
this.templateFormula = fr;
|
|
this.tokens = new byte[data.length - 10];
|
|
System.arraycopy(data, 10, this.tokens, 0, this.tokens.length);
|
|
}
|
|
|
|
public boolean add(BaseSharedFormulaRecord fr) {
|
|
boolean added = false;
|
|
int r = fr.getRow();
|
|
if (r >= this.firstRow && r <= this.lastRow) {
|
|
int c = fr.getColumn();
|
|
if (c >= this.firstCol && c <= this.lastCol) {
|
|
this.formulas.add(fr);
|
|
added = true;
|
|
}
|
|
}
|
|
return added;
|
|
}
|
|
|
|
Cell[] getFormulas(FormattingRecords fr, boolean nf) {
|
|
Cell[] sfs = new Cell[this.formulas.size() + 1];
|
|
if (this.templateFormula == null) {
|
|
logger.warn("Shared formula template formula is null");
|
|
return new Cell[0];
|
|
}
|
|
this.templateFormula.setTokens(this.tokens);
|
|
NumberFormat templateNumberFormat = null;
|
|
if (this.templateFormula.getType() == CellType.NUMBER_FORMULA) {
|
|
SharedNumberFormulaRecord snfr = (SharedNumberFormulaRecord)this.templateFormula;
|
|
templateNumberFormat = snfr.getNumberFormat();
|
|
if (fr.isDate(this.templateFormula.getXFIndex())) {
|
|
this.templateFormula = new SharedDateFormulaRecord(snfr, fr, nf, this.sheet, snfr.getFilePos());
|
|
this.templateFormula.setTokens(snfr.getTokens());
|
|
}
|
|
}
|
|
sfs[0] = this.templateFormula;
|
|
BaseSharedFormulaRecord f = null;
|
|
for (int i = 0; i < this.formulas.size(); i++) {
|
|
f = this.formulas.get(i);
|
|
if (f.getType() == CellType.NUMBER_FORMULA) {
|
|
SharedNumberFormulaRecord snfr = (SharedNumberFormulaRecord)f;
|
|
if (fr.isDate(f.getXFIndex()))
|
|
f = new SharedDateFormulaRecord(snfr, fr, nf, this.sheet, snfr.getFilePos());
|
|
}
|
|
f.setTokens(this.tokens);
|
|
sfs[i + 1] = f;
|
|
}
|
|
return sfs;
|
|
}
|
|
|
|
BaseSharedFormulaRecord getTemplateFormula() {
|
|
return this.templateFormula;
|
|
}
|
|
}
|