49 lines
1.7 KiB
Java
49 lines
1.7 KiB
Java
package jxl.write.biff;
|
|
|
|
import common.Logger;
|
|
import java.text.NumberFormat;
|
|
import jxl.NumberFormulaCell;
|
|
import jxl.biff.DoubleHelper;
|
|
import jxl.biff.FormulaData;
|
|
import jxl.biff.IntegerHelper;
|
|
import jxl.biff.formula.FormulaException;
|
|
import jxl.biff.formula.FormulaParser;
|
|
|
|
class ReadNumberFormulaRecord extends ReadFormulaRecord implements NumberFormulaCell {
|
|
private static Logger logger = Logger.getLogger(ReadNumberFormulaRecord.class);
|
|
|
|
public ReadNumberFormulaRecord(FormulaData f) {
|
|
super(f);
|
|
}
|
|
|
|
public double getValue() {
|
|
return ((NumberFormulaCell)getReadFormula()).getValue();
|
|
}
|
|
|
|
public NumberFormat getNumberFormat() {
|
|
return ((NumberFormulaCell)getReadFormula()).getNumberFormat();
|
|
}
|
|
|
|
protected byte[] handleFormulaException() {
|
|
byte[] expressiondata = null;
|
|
byte[] celldata = getCellData();
|
|
WritableWorkbookImpl w = getSheet().getWorkbook();
|
|
FormulaParser parser = new FormulaParser(Double.toString(getValue()), w, w, w.getSettings());
|
|
try {
|
|
parser.parse();
|
|
} catch (FormulaException e2) {
|
|
logger.warn(e2.getMessage());
|
|
}
|
|
byte[] formulaBytes = parser.getBytes();
|
|
expressiondata = new byte[formulaBytes.length + 16];
|
|
IntegerHelper.getTwoBytes(formulaBytes.length, expressiondata, 14);
|
|
System.arraycopy(formulaBytes, 0, expressiondata, 16, formulaBytes.length);
|
|
expressiondata[8] = (byte)(expressiondata[8] | 0x2);
|
|
byte[] data = new byte[celldata.length + expressiondata.length];
|
|
System.arraycopy(celldata, 0, data, 0, celldata.length);
|
|
System.arraycopy(expressiondata, 0, data, celldata.length, expressiondata.length);
|
|
DoubleHelper.getIEEEBytes(getValue(), data, 6);
|
|
return data;
|
|
}
|
|
}
|