📄 readformularecord.java
字号:
// Decompiled by Jad v1.5.7g. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi
// Source File Name: ReadFormulaRecord.java
package jxl.write.biff;
import common.Assert;
import common.Logger;
import jxl.*;
import jxl.biff.*;
import jxl.biff.formula.FormulaException;
import jxl.biff.formula.FormulaParser;
import jxl.write.WritableCell;
// Referenced classes of package jxl.write.biff:
// CellValue, FormulaRecord, WritableSheetImpl, WritableWorkbookImpl,
// SharedStrings
class ReadFormulaRecord extends CellValue
implements FormulaData
{
private static Logger logger;
private FormulaData formula;
private FormulaParser parser;
static Class class$jxl$write$biff$ReadFormulaRecord; /* synthetic field */
protected ReadFormulaRecord(FormulaData f)
{
super(Type.FORMULA, f);
formula = f;
}
protected final byte[] getCellData()
{
return super.getData();
}
protected byte[] handleFormulaException()
{
byte expressiondata[] = null;
byte celldata[] = super.getData();
WritableWorkbookImpl w = getSheet().getWorkbook();
parser = new FormulaParser(getContents(), w, w, w.getSettings());
try
{
parser.parse();
}
catch(FormulaException e2)
{
logger.warn(e2.getMessage());
parser = new FormulaParser("\"ERROR\"", w, w, w.getSettings());
try
{
parser.parse();
}
catch(FormulaException e3)
{
Assert.verify(false);
}
}
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] |= 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);
return data;
}
public byte[] getData()
{
byte celldata[];
celldata = super.getData();
byte expressiondata[] = null;
byte data[];
byte expressiondata[];
if(parser == null)
{
expressiondata = formula.getFormulaData();
} else
{
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] |= 0x2;
data = new byte[celldata.length + expressiondata.length];
System.arraycopy(celldata, 0, data, 0, celldata.length);
System.arraycopy(expressiondata, 0, data, celldata.length, expressiondata.length);
return data;
FormulaException e;
e;
logger.warn(CellReferenceHelper.getCellReference(getColumn(), getRow()) + " " + e.getMessage());
return handleFormulaException();
}
public CellType getType()
{
return formula.getType();
}
public String getContents()
{
return formula.getContents();
}
public byte[] getFormulaData()
throws FormulaException
{
byte d[] = formula.getFormulaData();
byte data[] = new byte[d.length];
System.arraycopy(d, 0, data, 0, d.length);
data[8] |= 0x2;
return data;
}
public WritableCell copyTo(int col, int row)
{
return new FormulaRecord(col, row, this);
}
void setCellDetails(FormattingRecords fr, SharedStrings ss, WritableSheetImpl s)
{
super.setCellDetails(fr, ss, s);
s.getWorkbook().addRCIRCell(this);
}
void columnInserted(Sheet s, int sheetIndex, int col)
{
try
{
if(parser == null)
{
byte formulaData[] = formula.getFormulaData();
byte formulaBytes[] = new byte[formulaData.length - 16];
System.arraycopy(formulaData, 16, formulaBytes, 0, formulaBytes.length);
parser = new FormulaParser(formulaBytes, this, getSheet().getWorkbook(), getSheet().getWorkbook(), getSheet().getWorkbookSettings());
parser.parse();
}
parser.columnInserted(sheetIndex, col, s == getSheet());
}
catch(FormulaException e)
{
logger.warn("cannot insert column within formula: " + e.getMessage());
}
}
void columnRemoved(Sheet s, int sheetIndex, int col)
{
try
{
if(parser == null)
{
byte formulaData[] = formula.getFormulaData();
byte formulaBytes[] = new byte[formulaData.length - 16];
System.arraycopy(formulaData, 16, formulaBytes, 0, formulaBytes.length);
parser = new FormulaParser(formulaBytes, this, getSheet().getWorkbook(), getSheet().getWorkbook(), getSheet().getWorkbookSettings());
parser.parse();
}
parser.columnRemoved(sheetIndex, col, s == getSheet());
}
catch(FormulaException e)
{
logger.warn("cannot remove column within formula: " + e.getMessage());
}
}
void rowInserted(Sheet s, int sheetIndex, int row)
{
try
{
if(parser == null)
{
byte formulaData[] = formula.getFormulaData();
byte formulaBytes[] = new byte[formulaData.length - 16];
System.arraycopy(formulaData, 16, formulaBytes, 0, formulaBytes.length);
parser = new FormulaParser(formulaBytes, this, getSheet().getWorkbook(), getSheet().getWorkbook(), getSheet().getWorkbookSettings());
parser.parse();
}
parser.rowInserted(sheetIndex, row, s == getSheet());
}
catch(FormulaException e)
{
logger.warn("cannot insert row within formula: " + e.getMessage());
}
}
void rowRemoved(Sheet s, int sheetIndex, int row)
{
try
{
if(parser == null)
{
byte formulaData[] = formula.getFormulaData();
byte formulaBytes[] = new byte[formulaData.length - 16];
System.arraycopy(formulaData, 16, formulaBytes, 0, formulaBytes.length);
parser = new FormulaParser(formulaBytes, this, getSheet().getWorkbook(), getSheet().getWorkbook(), getSheet().getWorkbookSettings());
parser.parse();
}
parser.rowRemoved(sheetIndex, row, s == getSheet());
}
catch(FormulaException e)
{
logger.warn("cannot remove row within formula: " + e.getMessage());
}
}
protected FormulaData getReadFormula()
{
return formula;
}
public String getFormula()
throws FormulaException
{
return ((FormulaCell)formula).getFormula();
}
static Class class$(String x0)
{
return Class.forName(x0);
ClassNotFoundException x1;
x1;
throw new NoClassDefFoundError(x1.getMessage());
}
static
{
logger = Logger.getLogger(class$jxl$write$biff$ReadFormulaRecord != null ? class$jxl$write$biff$ReadFormulaRecord : (class$jxl$write$biff$ReadFormulaRecord = class$("jxl.write.biff.ReadFormulaRecord")));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -