⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commonfield.java

📁 Excel Report是一款基于Excel的报表生成工具
💻 JAVA
字号:
/***********************************************************************
 * Module:  CommonField.java
 * Author:  juny
 * Created: 2006年7月13日 14:13:26
 * Purpose: Defines the Class CommonField
 ***********************************************************************/

package net.excel.report.base.element;

import java.util.Date;

import net.excel.report.Logger;
import net.excel.report.base.BaseField;
import net.excel.report.base.ITempletContainer;
import net.excel.report.base.Parameter;
import net.excel.report.util.AnalyseTempletTool;
import jxl.format.CellFormat;
import jxl.write.DateTime;
import jxl.write.Number;
import jxl.write.WritableCell;
import jxl.write.WritableCellFeatures;

/**
 * 普通模板字段处理类,代表模板中的一个具体定义的字段类模板对象, 如$F{ds.field1},
 * $P{param1}等都被抽象成一个CommonField对象实例。
 * @author juny
 */
public class CommonField extends BaseField {
    private static Logger log = Logger.getLogger(CommonField.class);
    /**
     * @param container
     */
    public CommonField(ITempletContainer container) {
        super(container);
    }

    /*
     * (non-Javadoc)
     * @see excel.report.base.IElementWriter#setElementTempletValue(java.lang.String)
     */
    public void setElementTempletValue(String value) {
        var = ElementFactory.getVariableInstances(value);
        if (null == var) {
            log.error("Couldn't create the variable instance! -"
	                   + value);
        }
        StringBuffer s = new StringBuffer(AnalyseTempletTool
                .getElementDeclare(value));
        if (AnalyseTempletTool.haveVariableName(s)) {
            setName(AnalyseTempletTool.getVariableName(s));
        } else {
            setName(var.getName());
        }
    }

    /*
     * (non-Javadoc)
     * @see net.excel.report.base.BaseField#writeImpl(net.excel.report.base.Parameter)
     */
    public boolean writeImpl(Parameter param) throws Exception {
        if (null == var) {
            return false;
        }

        //配置参数
        setParam(param);

        Object value = var.getValue();
        //modified date 2006-11-01 当返回值为null时,当前单元格设置为""字符串
        if(null == value){
            value = "";
        }
        
        WritableCell cell = param.wc;

        try {
            WritableCell retCell = copyCellByType(cell, value, param.destCol,
                    param.destRow);
            if (null == retCell) {
                retCell = copyDefaultCell(param, value);
            }
            param.wc = retCell;
        } catch (Exception e) {
            log.error("Catch an exception while write a cell in col="
                    + cell.getColumn() + " row=" + cell.getRow() + " value is"
                    + value.toString() + " \n" + " error message:"
                    + e.getMessage());
            return false;
        }
        return true;
    }

    /**
     * 设置模板对象参数,通过参数模板对象知道自己应该从何处去取得具体的模板值
     * @param param
     */
    private void setParam(Parameter param) {
        if (!initialized) {
            //配置相应变量对象的初始化参数。
            if (var instanceof FieldVariable) {
                ((FieldVariable) var).setDataSource(param.dataSources);
            } else if (var instanceof ParameterVariable) {
                ((ParameterVariable) var).setParam(param.params);
            }
            initialized = true;
        }
    }

    /**
     * 拷贝一个单元格,新单元格的类型根据数据的类型来产生,
     * 并复制源单元格的格式化,边框等其他属性到新的单元格中。
     * @param cell
     * @param value
     * @param destCol
     * @param destRow
     * @return
     */
    private WritableCell copyCellByType(WritableCell cell, Object value,
            int destCol, int destRow) {
        WritableCell retCell = null;
        CellFormat cellformat = null;

        if (value instanceof Date) {
            cellformat = cell.getCellFormat();
            DateTime dt = null;
            if (null != cellformat) {
                dt = new DateTime(destCol, destRow, (Date) value, cell
                        .getCellFormat());
            } else {
                dt = new DateTime(destCol, destRow, (Date) value);
            }
            retCell = dt;
        }

        if (value instanceof java.lang.Number) {
            cellformat = cell.getCellFormat();
            Number n = null;
            if (null != cellformat) {
                n = new Number(destCol, destRow, Double.parseDouble(value
                        .toString()), cell.getCellFormat());
            } else {
                n = new Number(destCol, destRow, Double.parseDouble(value
                        .toString()));
            }
            retCell = n;
        }

        if (null != retCell) {
            WritableCellFeatures wcf = cell.getWritableCellFeatures();
            if (null != wcf) {
                retCell.setCellFeatures(wcf);
            }
        }

        return retCell;
    }

    public String toString() {
        if (null != var) {
            return var.toString();
        }
        return "null";
    }

    private Variable var = null;

    private boolean initialized = false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -