FormulaRecord.java 源代码


package jxl.read.biff;

import common.Assert;
import common.Logger;
import jxl.CellType;
import jxl.WorkbookSettings;
import jxl.biff.DoubleHelper;
import jxl.biff.FormattingRecords;
import jxl.biff.IntegerHelper;
import jxl.biff.WorkbookMethods;
import jxl.biff.formula.ExternalSheet;

public class FormulaRecord extends CellValue {
    static Class class$jxl$read$biff$FormulaRecord;
    public static final IgnoreSharedFormula ignoreSharedFormula;
    private static Logger logger;
    private CellValue formula;
    private boolean shared;

    static {
        Class cls = class$jxl$read$biff$FormulaRecord;
        if (cls == null) {
            cls = class$("jxl.read.biff.FormulaRecord");
            class$jxl$read$biff$FormulaRecord = cls;
        }
        logger = Logger.getLogger(cls);
        ignoreSharedFormula = new IgnoreSharedFormula();
    }

    static Class class$(String str) {
        try {
            return Class.forName(str);
        } catch (ClassNotFoundException e) {
            throw new NoClassDefFoundError(e.getMessage());
        }
    }

    public static class IgnoreSharedFormula {
        private IgnoreSharedFormula() {
        }
    }

    public FormulaRecord(Record record, File file, FormattingRecords formattingRecords, ExternalSheet externalSheet, WorkbookMethods workbookMethods, SheetImpl sheetImpl, WorkbookSettings workbookSettings) {
        super(record, formattingRecords, sheetImpl);
        byte[] data = getRecord().getData();
        this.shared = false;
        if ((IntegerHelper.getInt(data[14], data[15]) & 8) != 0) {
            this.shared = true;
            if (data[6] == 0 && data[12] == -1 && data[13] == -1) {
                this.formula = new SharedStringFormulaRecord(record, file, formattingRecords, externalSheet, workbookMethods, sheetImpl, workbookSettings);
                return;
            }
            if (data[6] == 3 && data[12] == -1 && data[13] == -1) {
                this.formula = new SharedStringFormulaRecord(record, file, formattingRecords, externalSheet, workbookMethods, sheetImpl, SharedStringFormulaRecord.EMPTY_STRING);
                return;
            }
            if (data[6] == 2 && data[12] == -1 && data[13] == -1) {
                this.formula = new SharedErrorFormulaRecord(record, file, data[8], formattingRecords, externalSheet, workbookMethods, sheetImpl);
                return;
            }
            if (data[6] == 1 && data[12] == -1 && data[13] == -1) {
                this.formula = new SharedBooleanFormulaRecord(record, file, data[8] == 1, formattingRecords, externalSheet, workbookMethods, sheetImpl);
                return;
            }
            SharedNumberFormulaRecord sharedNumberFormulaRecord = new SharedNumberFormulaRecord(record, file, DoubleHelper.getIEEEDouble(data, 6), formattingRecords, externalSheet, workbookMethods, sheetImpl);
            sharedNumberFormulaRecord.setNumberFormat(formattingRecords.getNumberFormat(getXFIndex()));
            this.formula = sharedNumberFormulaRecord;
            return;
        }
        if (data[6] == 0 && data[12] == -1 && data[13] == -1) {
            this.formula = new StringFormulaRecord(record, file, formattingRecords, externalSheet, workbookMethods, sheetImpl, workbookSettings);
            return;
        }
        if (data[6] == 1 && data[12] == -1 && data[13] == -1) {
            this.formula = new BooleanFormulaRecord(record, formattingRecords, externalSheet, workbookMethods, sheetImpl);
            return;
        }
        if (data[6] == 2 && data[12] == -1 && data[13] == -1) {
            this.formula = new ErrorFormulaRecord(record, formattingRecords, externalSheet, workbookMethods, sheetImpl);
        } else if (data[6] == 3 && data[12] == -1 && data[13] == -1) {
            this.formula = new StringFormulaRecord(record, formattingRecords, externalSheet, workbookMethods, sheetImpl);
        } else {
            this.formula = new NumberFormulaRecord(record, formattingRecords, externalSheet, workbookMethods, sheetImpl);
        }
    }

    public FormulaRecord(Record record, File file, FormattingRecords formattingRecords, ExternalSheet externalSheet, WorkbookMethods workbookMethods, IgnoreSharedFormula ignoreSharedFormula2, SheetImpl sheetImpl, WorkbookSettings workbookSettings) {
        super(record, formattingRecords, sheetImpl);
        byte[] data = getRecord().getData();
        this.shared = false;
        if (data[6] == 0 && data[12] == -1 && data[13] == -1) {
            this.formula = new StringFormulaRecord(record, file, formattingRecords, externalSheet, workbookMethods, sheetImpl, workbookSettings);
            return;
        }
        if (data[6] == 1 && data[12] == -1 && data[13] == -1) {
            this.formula = new BooleanFormulaRecord(record, formattingRecords, externalSheet, workbookMethods, sheetImpl);
        } else if (data[6] == 2 && data[12] == -1 && data[13] == -1) {
            this.formula = new ErrorFormulaRecord(record, formattingRecords, externalSheet, workbookMethods, sheetImpl);
        } else {
            this.formula = new NumberFormulaRecord(record, formattingRecords, externalSheet, workbookMethods, sheetImpl);
        }
    }

    @Override
    public String getContents() {
        Assert.verify(false);
        return "";
    }

    @Override
    public CellType getType() {
        Assert.verify(false);
        return CellType.EMPTY;
    }

    public final CellValue getFormula() {
        return this.formula;
    }

    public final boolean isShared() {
        return this.shared;
    }
}