当前位置:  编程技术>java/j2ee

java实现excel导入数据的工具类

    来源: 互联网  发布时间:2014-11-04

    本文导语:  导入Excel数据的工具类,调用也就几行代码,很简单的。 代码如下:import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffException;import org.apache.commons.beanutils.BeanUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory; import java.io.IOE...

导入Excel数据的工具类,调用也就几行代码,很简单的。

代码如下:

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import org.apache.commons.beanutils.BeanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.InputStream;
import java.util.*;

/**
 * Excel导入的工具类.
 */
public class ExcelUtils {
    private static final Logger logger = LoggerFactory.getLogger(ExcelUtils.class);
    //成功
    public static final Integer STATUS_OK = Integer.valueOf(1);
    //失败
    public static final Integer STATUS_NO = Integer.valueOf(0);
    /**
     * 私有化构造器
     */
    private ExcelUtils(){

    }

    /**
     * 获取excel文件中的数据对象
     *
     * @param is                        excel
     * @param excelColumnNames          excel中每个字段的英文名(应该与pojo对象的字段名一致,顺序与excel一致)
     * @return                          excel每行是list一条记录,map是对应的"字段名-->值"
     * @throws Exception
     */
    public static List getImportData(InputStream is, List excelColumnNames) throws Exception {
        logger.debug("InputStream:{}", is);
        if (is == null) {
            return Collections.emptyList();
        }

        Workbook workbook = null;
        try {
            //拿到excel
            workbook = Workbook.getWorkbook(is);
        } catch (BiffException e) {
            logger.error(e.getMessage(), e);
            return Collections.EMPTY_LIST;
        } catch (IOException e) {
            logger.error(e.getMessage(), e);
            return Collections.EMPTY_LIST;
        }
        logger.debug("workbook:{}", workbook);

        if (workbook == null) {
            return Collections.emptyList();
        }

        //第一个sheet
        Sheet sheet = workbook.getSheet(0);
        //行数
        int rowCounts = sheet.getRows() - 1;
        logger.debug("rowCounts:{}", rowCounts);
        List list = new ArrayList(rowCounts - 1);

        //双重for循环取出数据
        for(int i = 1; i < rowCounts; i++){
            Map params = new HashMap();
            //i,j i:行 j:列
            for(int j = 0; j < excelColumnNames.size(); j++){
                Cell cell = sheet.getCell(j, i);
                params.put(excelColumnNames.get(j), cell.getContents());
            }

            list.add(params);
        }

        return list;
    }

    /**
     * 获取导入数据为对象的List
     *
     * @param data
     * @param clazz
     * @param excelColumnNames
     * @param checkExcel
     * @param
     * @return
     * @throws Exception
     */
    public static List makeData(List data, Class clazz, List excelColumnNames, CheckExcel checkExcel) throws Exception {
        if(data == null || data.isEmpty() || clazz == null || checkExcel == null) {
            return Collections.EMPTY_LIST;
        }

        List result = new ArrayList(data.size());
        for(Map d : data) {
            if(checkExcel != null && !checkExcel.check(d)) {
                continue;
            }
            T entity = clazz.newInstance();
            for(String column : excelColumnNames) {
                BeanUtils.setProperty(entity, column, d.get(column));
            }

            result.add(entity);
        }

        return result;
    }
}

检查excel中每一行的数据是否合法

代码如下:

import java.util.Map;
/**
 * 检查excel中每一行的数据是否合法
 */
public interface CheckExcel {
    /**
     * 返回true合法
     *
     * @param data      excel中每一行的数据
     * @return
     */
    public boolean check(Map data);
}

调用部分

代码如下:

List data = ExcelUtils.getImportData(is,Constants.EXCEL_COLUMN_NAMES);
List allocations = ExcelUtils.makeData(data, FeeAllocation.class, Constants.EXCEL_COLUMN_NAMES, new CheckExcel() {
            public boolean check(Map data) {
                if(StringUtils.isEmpty(data.get("name")))
                    return false;
                return true;
            }
        });

    
 
 

您可能感兴趣的文章:

  • 关于Servlet的导入java package?
  • Rational Rose怎么导入java类库
  • JAVA导入哪些类不需用import?
  • 菜鸟问题:java中import导入的文件在哪里,可以看倒源代码吗?
  • 请问在thinking java中如何导入import com.bruceeckel.util.*
  • 如何用java实现将数据库中的image类型数据导出到文本文件。并导入(高分求救!!)
  • java里怎么导入声音?是什么类型的文件??
  • 利用Java 技术,怎样把JSP页面中的表格数据导入到microsoft Excel中
  • Java 使用poi把数据库中数据导入Excel的解决方法
  • 在java或jsp中,如何将web页上表格中的数据导入到excel中?多谢了,一定给分,希望直接给程序,不要写连接,因为我现在上望不方便
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • java.util.Date 和 java.slq.Date 如何最简单实现互换?
  • java tomcat实现Session对象的持久化原理及配置方法介绍
  • 不太明白,利用RMI实现JAVA分布式应用 和 EJB实现JAVA分布式应用有什么区别。
  • java实现判断字符串是否全是数字的四种方法代码举例
  • java的API中有没有既实现了Map接口又实现了List接口的类?
  • java序列化实现Serializable接口
  • 我是java新手,请问java中与平台相关的操作是怎样实现的
  • java中Spring框架介绍及如何实现对Bean的管理
  • java文件复制代码片断(java实现文件拷贝)
  • java Servlet实现Session创建存取以及url重写代码示例
  • 要做一个在applet,实现可以托拽的图形(比如长方形和线段等)?那位高手有资料?或者有没有java的第三方类库实现此功能?
  • java 与 C++ 实现后绑定的方法
  • XUL的Java实现 javaXUL
  • 用JAVA实现与QQ相同的功能!
  • 请问《软件工程java语言实现》一书在那里能下载
  • 如何实现Java下的回调函数!
  • Java实现的XForms Chiba
  • Java的SAMBA客户端实现 jCIFS
  • Lua 实现的 Java 虚拟机 luje
  • yaml 的 java 实现 JYaml
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 轻量级Java开发工具 Java Tools
  • Java数据库建模工具 Mogwai Java Tools
  • Java源码工具 java2html
  • Java代码分享工具 Java Gems
  • Java数据库映射工具 SQL2JAVA
  • 急!请问有分析java程序性能瓶颈的工具吗?例如,统计 java 程序中函数调用次数?
  • Java 常用工具包 JCake
  • java初学者问:java操作平台是什么?用什么工具?
  • 初学java可以用哪种工具好?visual age for java 怎么样?
  • 我初学java,请教各位开发java用什么工具好?
  • 能否推荐几本学习Java的好教材呢?那一种Java的开发工具更好呢?
  • 用什么工具可以把JAVA的.CLASS文件反编译成.JAVA文件??
  • 大虾们,我是JAVA菜鸟,请问你们用什么JAVA开发工具???(回答有分)
  • Java开源报表工具 JasperReports
  • 关于java的开发工具jdk,sdk?
  • Java 开发工具 tIDE
  • JAVA入门初问?(学Java用什么平台和工具好?)
  • 我想学习JAVA, 应该如何下手, 选用什么工具?
  • Java 代码分析工具 JHawk
  • Java程序性能分析工具 VisualVM
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3