excelmanager.java

来自「J2EE项目开发Excel数据导入导出操作组件源代码(附带说明文档)」· Java 代码 · 共 259 行

JAVA
259
字号
package com.javayjm.excel;

/**
 * 公 司:
 * 文件名:ExcelManager.java
 * 作 者:YJM
 * 版本号:1.0
 * 时 间:2007-11-14上午10:42:25
 */
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.builder.ToStringBuilder;

import com.javayjm.excel.config.ExcelConfigFactory;
import com.javayjm.excel.config.ExcelConfigManager;
import com.javayjm.excel.file.ExcelToModel;
import com.javayjm.excel.file.ModelToExcelMessage;
import com.javayjm.excel.file.impl.ExcelToModelImpl;
import com.javayjm.excel.file.impl.ModelToExcelMessageImpl;
import com.javayjm.test.model.DeptModel;

public class ExcelManager {
    private File excelFile = null;

    private String modelName = "";

    private Map valueMap = null;

    private ExcelToModel etm = null;

    private ModelToExcelMessage mtem = null;

    private ExcelConfigManager configManager = null;

    public ExcelManager(String fileName, String modelName, Map valueMap) {
        this(new File(fileName), modelName, valueMap);
    }

    public ExcelManager(String fileName, String modelName) {
        this(new File(fileName), modelName, new HashMap());
    }

    public ExcelManager(File fileName, String modelName, Map valueMap) {
        this.excelFile = fileName;
        this.modelName = modelName;
        this.valueMap = valueMap;
        configManager = ExcelConfigFactory.createExcelConfigManger();
    }

    /**
     * 取得从Excel转换到Model的 List.
     */
    public List getModelList() {
        // ExcelConfigManager configManager =
        // ExcelConfigFactory.createExcelConfigManger();
        // ExcelToModel etm = new
        // ExcelToModelImpl(this.excelFile,configManager.getModel(modelName,
        // ""),this.valueMap);
        // List modelList = new ArrayList();

        // if(etm==null){
        // etm = new
        // ExcelToModelImpl(this.excelFile,configManager.getModel(modelName,
        // ""),this.valueMap);
        // }
        if (isValidateExcelFormat()) {
            // modelList = etm.getModelList();
            return etm.getModelList();
        }
        return null;
    }
    /**
     * 验证Xml文件配制的Excel标题在 Excel文件中是否在
     */
    public boolean isValidateExcelFormat() {
        // ExcelConfigManager configManager =
        // ExcelConfigFactory.createExcelConfigManger();
        // ExcelToModel etm = new
        // ExcelToModelImpl(this.excelFile,configManager.getModel(modelName,
        // ""),this.valueMap);
        if (etm == null) {
            etm = new ExcelToModelImpl(this.excelFile, configManager.getModel(modelName, ""), this.valueMap);
        }
        return etm.validateExcelFormat();
    }
    /**
     * 取得Xml文件中配制的对应Excel文件中的标题
     */
    public Map getConfigTitle() {
        if (etm == null) {
            etm = new ExcelToModelImpl(this.excelFile, configManager.getModel(modelName, ""), this.valueMap);
        }
        return etm.getConfigTitle();
    }
    /**
     * 取得从Excel转换到Model的并且验证通过的 List.
     */
    public List getSucessModelList() {
        if (isValidateExcelFormat()) {
            return etm.getSuccessModelList();
        }
        return null;
    }
    /**
     * 取得从Excel转换到Model的并且验证未通过的 List.
     */
    public List getErrorModelList() {
        if (isValidateExcelFormat()) {
            return etm.getErrorModelList();
        }
        return null;
    }
    /**
     * 
     */
    private File getFile(File excelFile, List modelList, String strFlag) {
        if (mtem == null) {
            if (excelFile == null)
                mtem = new ModelToExcelMessageImpl(this.excelFile, configManager.getModel(modelName, ""), modelList);
            else
                mtem = new ModelToExcelMessageImpl(excelFile, configManager.getModel(modelName, ""), modelList);
        }
        mtem.setStartTitleRow(etm.getStartTitleRow());
        mtem.setIntSheet(etm.getIntSheet());
        if ("-1".equals(strFlag)) {
            return mtem.getFile();
        } else if ("0".equals(strFlag)) {
            return mtem.getSuccessFile();
        } else {
            return mtem.getErrorFile();
        }
    }
    /**
     * 把转换之后的modelList中验证未通过的消息,回写到Excel文件中,并返回全部导入时文件的记录
     * @param  excelFile File
     * @param  modelList List
     * @return File
     */
    public File getExcelFile(File excelFile, List modelList) {
        return this.getFile(excelFile, modelList, "-1");
    }
    /**
     * 把转换之后的modelList中验证未通过的消息,回写到Excel文件中,并返回全部导入时文件的验证通过的记录
     * @param  excelFile File
     * @param  modelList List
     * @return File
     */
    public File getSucessExcelFile(File excelFile, List modelList) {
        return this.getFile(excelFile, modelList, "0");
    }
    /**
     * 把转换之后的modelList中验证未通过的消息,回写到Excel文件中,并返回全部导入时文件的验证未通过的记录
     * @param  excelFile File
     * @param  modelList List
     * @return File
     */
    public File getErrorExcelFile(File excelFile, List modelList) {
        return this.getFile(excelFile, modelList, "1");
    }
    /**
     * 把转换之后的modelList中验证未通过的消息,回写到Excel文件中,并返回全部导入时文件的记录
     * @param  modelList List
     * @return File
     */
    public File getExcelFile(List modelList) {
        return this.getFile(null, modelList, "-1");
    }
    /**
     * 把转换之后的modelList中验证未通过的消息,回写到Excel文件中,并返回全部导入时文件的验证通过的记录
     * @param  modelList List
     * @return File
     */
    public File getSucessExcelFile(List modelList) {
        return this.getFile(null, modelList, "0");
    }
    /**
     * 把转换之后的modelList中验证未通过的消息,回写到Excel文件中,并返回全部导入时文件的验证未通过的记录
     * @param  modelList List
     * @return File
     */
    public File getErrorExcelFile(List modelList) {
        return this.getFile(null, modelList, "1");
    }
    /**
     * 配制文件加强,一是可以传一个固定值到所有Bena中. 配制一个固定值.把固定值在RuturnConfig 单设成一个Map
     * ,配制文件中,对固定值的配制必须有默认值, ExcelToModelImpl
     * 实现时,根据Excel列,属性设置完成后,对Map循环,设置其值.首先从传参Map中取值,没有取默认值设置.
     * 二是可以配制转换对应的码表值.如:excel中传的值为"长期" 可以配制成 "bgqx长期"做为键值 "C" 做为 Bean 设置的值.
     */
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("deptNo", "1");
        map.put("bgqx永久", "Y");
        map.put("bgqx长期", "C");
        map.put("bgqx短期", "D");
        ExcelManager test = new ExcelManager("D:\\work\\workspace\\excelfile\\test.xls", "deptModel", map);
        //ExcelManager test = new ExcelManager("D:\\work\\workspace\\excelfile\\ym.xls", "importExcelForm", map);
        //设置对应取第几个sheet内的值。
        test.getEtm().setSheet(0);
        //设置取目标sheet的名称
        //test.getEtm().setSheet("Sheet2");
        // 按列读取
        // test.getEtm().setUseColumn(true);
        List modelList = test.getModelList();

//        System.out.println("--" + ToStringBuilder.reflectionToString(test.getConfigTitle().entrySet().toArray()));
//        // System.out.println("size = " + modelList.size());
        for (int i = 0; i < modelList.size(); i++) {
            Object obj = modelList.get(i);
            System.out.println("--" + obj.getClass().getSimpleName());
            System.out.println("--" + ToStringBuilder.reflectionToString(obj));
        }
        // 如果Class配制成HashMap,下面可以测试。
        for (int i = 0; i < modelList.size(); i++) {
            Object oo = modelList.get(i);
            if (oo instanceof Map) {
                Map obj = (Map) oo;
                System.out.println("--" + obj.getClass().getSimpleName());
                System.out.println("--" + ToStringBuilder.reflectionToString(obj.keySet().toArray()));
                System.out.println("--" + ToStringBuilder.reflectionToString(obj.entrySet().toArray()));
            }
        }
        System.out.println("---------======================--------------------");
        // ExcelManager test2 = new
        // ExcelManager("E:\\workspace\\test.xls","deptModel",map);
        // List modelList2 = test2.getModelList();

        // 测试错误数据回写
//         List list = new ArrayList();
//         DeptModel dept = new DeptModel();
//         dept.setFlag("0");
//         dept.setMessage("00000");
//         DeptModel dept1 = new DeptModel();
//         dept1.setFlag("1");
//         dept1.setMessage("111111");
//         list.add(dept);
//         list.add(dept1);
//            
         test.getExcelFile(modelList);
         

    }

    /**
     * 取得操纵Excel文件的实例
     */
    public ExcelToModel getEtm() {
        if (etm == null) {
            etm = new ExcelToModelImpl(this.excelFile, configManager.getModel(modelName, ""), this.valueMap);
        }
        return etm;
    }

}

⌨️ 快捷键说明

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