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


     在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工具类代码(只是导出.xls):

    /**
     * @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){
            //判断版本
            boolean isExcel2003 = url.toLowerCase().endsWith("xls")?true:false;
            // 声明一个工作薄
            Workbook workbook = null;
            if(isExcel2003){
                workbook = new HSSFWorkbook();
            }else{
                workbook = new XSSFWorkbook();
            }
            //响应码
            int code=200;
            //获取一个帮助类
            CreationHelper factory = workbook.getCreationHelper();
            // 生成一个表格
            Sheet sheet = workbook.createSheet(title);
            //产生表格标题行
            Row row = sheet.createRow(0);
            //遍历写入表头信息
            for (short i = 0; i < headers.length; i++) {
                Cell cell = row.createCell(i);
                RichTextString text = factory.createRichTextString(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;
    
        }
    
    
  • 相关阅读:
    Gym
    UVALive
    UVALive
    UVALive
    UVALive
    Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset Trie
    HDU 5816 Hearthstone 概率dp
    欧几里德与扩展欧几里德算法(转)
    差分约束系统详解(转)
    2016年第七届蓝桥杯C/C++程序设计本科B组决赛
  • 原文地址:https://www.cnblogs.com/hhmm99/p/9587824.html
Copyright © 2020-2023  润新知