当前位置: 移动技术网 > IT编程>开发语言>Java > java POI导出Excel文件数据库的数据

java POI导出Excel文件数据库的数据

2018年09月05日  | 移动技术网IT编程  | 我要评论
在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。这里我简单实现导出Excel文件。 POI jar包下载:http://poi.apache.org/download.html 文章最后面,封装了通 ...

 在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。这里我简单实现导出excel文件。

poi jar包下载:http://poi.apache.org/download.html

文章最后面,封装了通用型的poi工具类,直接复制就可使用(任意 list<实体类>)。

 

 

导出文件:


 

 



 

前端ajax异步请求代码:

$("#btn").on("click",function () {
            $.ajax("outstu",{
                type:"post",
                success:function (data) {
                    if (data==200){
                        alert("导出成功!");
                    }else {
                        alert("导出失败!");
                    }
                }
            });
        })

后台servlet代码:

/**
 * @author hh
 */
@webservlet("/outstu")
public class stuoutservlet extends httpservlet {
    @override
    protected void service(httpservletrequest req, httpservletresponse resp) throws servletexception, ioexception {
        //数据库读取学生对象列表
        list<student> list = new studentdao().liststudent();
        //表头
        string[] header={"编号","姓名","年龄","性别","电话","籍贯"};
        //保存文件位置+文件名(后缀一定.xls)
        string url = "/users/mac/documents/outstudentdata/学生信息.xls";
        //调用封装的poi工具类
        int code=poiutil.outexcel(list,url,header,"studeninfo");
        //返回响应码(是否成功导出)
        resp.getwriter().print(code);
    }
}

自己封装简单poi工具类代码:

/**
 * @author hh
 */
public class poiutil {
    /**
     * 导出excel
     * @param list 学生对象列表
     * @param url 保存位置及文件名
     * @param headers 表头名称
     * @param title 单元表格名称
     * @return
     */
    public static int outexcel(list<student> list,string url,string[] headers,string title){
        int code=200;
        // 声明一个工作薄
        hssfworkbook workbook = new hssfworkbook();
        // 生成一个表格
        hssfsheet sheet = workbook.createsheet(title);
        //产生表格标题行
        hssfrow row = sheet.createrow(0);
        for (short i = 0; i < headers.length; i++) {
            hssfcell cell = row.createcell(i);
            hssfrichtextstring text = new hssfrichtextstring(headers[i]);
            cell.setcellvalue(text);
        }
        //遍历集合数据,产生数据行
        for (int i=0;i<list.size();i++) {
            row = sheet.createrow(i+1);
            //设置行数据
            row.createcell(0).setcellvalue(list.get(i).getsid());
            row.createcell(1).setcellvalue(list.get(i).getsname());
            row.createcell(2).setcellvalue(list.get(i).getsage());
            row.createcell(3).setcellvalue(list.get(i).getssex());
            row.createcell(4).setcellvalue(list.get(i).gettel());
            row.createcell(5).setcellvalue(list.get(i).getorigin());
        }
        //定义文件输出流
        outputstream out = null;
        try {
            out = new fileoutputstream(url);
            //写出hssfworkbook对象文件
            workbook.write(out);
            //刷新缓存
            out.flush();
            //关闭文件输出流
            out.close();
        } catch (ioexception e) {
            code=403;
            e.printstacktrace();
        }
        return code;

    }
}

 

利用反射封装的一个通用型poi工具类:

 

    /**
     *
     * @param list 泛型集合对象
     * @param url 保存位置及文件名
     * @param headers 所有表头信息
     * @param title 单元表格名称
     * @return 响应码 200:成功 403:失败
     */
    public static int outexcel2(list<?> list,string url,string[] headers,string title){
        int code=200;
        // 声明一个工作薄
        hssfworkbook workbook = new hssfworkbook();
        // 生成一个表格
        hssfsheet sheet = workbook.createsheet(title);
        //产生表格标题行
        hssfrow row = sheet.createrow(0);
        //遍历写入表头信息
        for (short i = 0; i < headers.length; i++) {
            hssfcell cell = row.createcell(i);
            hssfrichtextstring text = new hssfrichtextstring(headers[i]);
            cell.setcellvalue(text);
        }
        //遍历集合数据,产生数据行
        for (int i=0;i<list.size();i++) {
            //因为表头占据了一行所以这里i+1
            row = sheet.createrow(i+1);
            //获取所有字段对象 包括私有
            field[] fields=list.get(i).getclass().getdeclaredfields();
            //遍历所有字段对象
            for (int j = 0; j < fields.length; j++) {
                //定义存放值 的变量
                object value= null;
                try {
                    //打开访问开关
                    fields[j].setaccessible(true);
                    //获取字段的值
                    value = fields[j].get(list.get(i));
                } catch (illegalaccessexception e) {
                    code=403;
                    e.printstacktrace();
                }
                //获取的值写入到单元格中(我在这里直接tostring了,如果规范一点需要类型判断、转换)
                row.createcell(j).setcellvalue(value.tostring());
            }
        }
        //定义文件输出流
        outputstream out = null;
        try {
            out = new fileoutputstream(url);
            //写出hssfworkbook对象文件
            workbook.write(out);
            //刷新缓存
            out.flush();
            //关闭文件输出流
            out.close();
        } catch (ioexception e) {
            code=403;
            e.printstacktrace();
        }
        return code;

    }

 

 

 




                    
                    

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网