您的位置:首页 > 大数据

关于java poi 大数据导出 创建多个sheet

2017-03-02 13:47 489 查看
哎,最近碰见一个非常让人郁闷的需求,导出数据并且是数十万乃至百万,这就有些蛋疼了,没办法产品最大吗!  做呗于是便考虑同时导出多个Excel表格,说做边做,结果自然是失败了,最后发现在导出第一个Excel的流出的时候,边关流了以至于后面的Excel表格就失败了.于是乎就换了种方法,那就导出一个Excel表格但里面存在多个sheet.不说了贴代码,希望可以帮助到一些人,像我一样的初学者.

   @RequestMapping(value = "v_export.do")

    public void v_export(HttpServletRequest request, HttpServletResponse response, UserInvestExcel userInvestExcel) {

        Map<String,Object> paramMap = new HashMap<String,Object>();

//创建输出流

        OutputStream outStream = null;

        XSSFWorkbook workBook = new XSSFWorkbook();//创建工作薄

        try {

   //创建xlsx的名字

            final String fileName = "投资会员信息"+ DateUtil.getTodayYYYYMMDDHHMMSS()+".xlsx";

  //创建列头

            String[] headers = { "用户id", "用户名", "真实姓名", "身份证号", "手机号", "银行卡号","注册来源","注册时间","认证时间","渠道id","风险等级","邀请人"};

            String one = "1";

            Long l = Long.parseLong(one);

            paramMap.put("bankId",l);

            if(userInvestExcel.getUserId()!=null && userInvestExcel.getUserId()!=""){

                paramMap.put("userId",Long.parseLong(userInvestExcel.getUserId()));

            }

            paramMap.put("loginName",userInvestExcel.getLoginName());

            paramMap.put("realName",userInvestExcel.getRealName());

            paramMap.put("regSource",userInvestExcel.getRegSource());

            paramMap.put("boundPhone",userInvestExcel.getBoundPhone());

            paramMap.put("resultName",userInvestExcel.getResultName());

            paramMap.put("regBeginTime",userInvestExcel.getRegBeginTime());

            paramMap.put("regEndTime",userInvestExcel.getRegEndTime());

            paramMap.put("authBeginTime",userInvestExcel.getAuthBeginTime());

            paramMap.put("authEndTime",userInvestExcel.getAuthEndTime());

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            Map<String,Object> mapResult = userReadService.findUserInfoListByParams(paramMap);

            List<UserVOChild> list = (List<UserVOChild>)mapResult.get("list");//要导出数据

            int total = (Integer)mapResult.get("count");//总计录数

            List<UserInvestExcel> userExcelList = new ArrayList<UserInvestExcel>();

            //计算有几个excel

            int countExcel = total/50000+(total%50000==0?0:1);

            for(int i = 1;i <= countExcel;i++){

//清空list

                if(userExcelList.size()>0){

                    userExcelList.clear();

                }

                XSSFSheet sheet = workBook.createSheet("表格"+i);

                // 设置表格默认列宽度为15个字节

                sheet.setDefaultColumnWidth((short) 18);

                // 生成一个样式

                XSSFCellStyle style = workBook.createCellStyle();

                // 设置这些样式

                style.setFillForegroundColor(HSSFColor.WHITE.index);

                style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

                style.setBorderBottom(HSSFCellStyle.BORDER_THIN);

                style.setBorderLeft(HSSFCellStyle.BORDER_THIN);

                style.setBorderRight(HSSFCellStyle.BORDER_THIN);

                style.setBorderTop(HSSFCellStyle.BORDER_THIN);

                style.setAlignment(HSSFCellStyle.ALIGN_LEFT);

                // 生成一个字体

                //HSSFFont font = workbook.createFont();

                XSSFFont font = workBook.createFont();

                font.setColor(XSSFFont.COLOR_NORMAL);

                font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);

                // 把字体应用到当前的样式

                style.setFont(font);

                // 生成并设置另一个样式

                XSSFCellStyle style2 = workBook.createCellStyle();

                style2.setFillForegroundColor(HSSFColor.WHITE.index);

                style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

                style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);

                style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);

                style2.setBorderRight(HSSFCellStyle.BORDER_THIN);

                style2.setBorderTop(HSSFCellStyle.BORDER_THIN);

                style2.setAlignment(HSSFCellStyle.ALIGN_LEFT);

                // 生成另一个字体

                XSSFFont font2 = workBook.createFont();

                font2.setBoldweight(XSSFFont.BOLDWEIGHT_NORMAL);

                font.setColor(XSSFFont.COLOR_NORMAL);

                // 把字体应用到当前的样式

                style2.setFont(font2);

                XSSFRow row = sheet.createRow(0);

                for (short k = 0; k < headers.length; k++) {

                    XSSFCell cell = row.createCell(k);

                    cell.setCellStyle(style);

                    cell.setCellType(XSSFCell.CELL_TYPE_STRING);

                    XSSFRichTextString text = new XSSFRichTextString(headers[k]);

                    cell.setCellValue(text);

                }

                int list_num_start = 50000*(i-1);//开始下标

                int list_num_end = (countExcel==i?(i-1):i)*50000+(countExcel==i?total%50000:0);//结束下标

                for(int j = list_num_start;j < list_num_end;j++){

                    UserInvestExcel userInvestExcelByDate = new UserInvestExcel();

                    userInvestExcelByDate.setUserId(list.get(j).getId()+"");

                    userInvestExcelByDate.setLoginName(list.get(j).getName());

                    userInvestExcelByDate.setRealName(list.get(j).getRealName());

                    userInvestExcelByDate.setIdno(list.get(j).getIdnoByX());

                    userInvestExcelByDate.setBoundPhone(list.get(j).getBoundPhoneByX());

                    userInvestExcelByDate.setBankCard(list.get(j).getBankCardByX());

                    if(list.get(j).getRegSource()==null){

                        userInvestExcelByDate.setRegSource("未知");

                    }else{

                        if
bf83
(list.get(j).getRegSource().equals("1")){

                            userInvestExcelByDate.setRegSource("网站注册");

                        }else if(list.get(j).getRegSource().equals("2")){

                            userInvestExcelByDate.setRegSource("手机客户端注册");

                        }else if(list.get(j).getRegSource().equals("3")){

                            userInvestExcelByDate.setRegSource("分享");

                        }else if(list.get(j).getRegSource().equals("4")){

                            userInvestExcelByDate.setRegSource("M站");

                        }else if(list.get(j).getRegSource().equals("5")){

                            userInvestExcelByDate.setRegSource("安卓");

                        }else if(list.get(j).getRegSource().equals("6")){

                            userInvestExcelByDate.setRegSource("IOS");

                        }else if(list.get(j).getRegSource().equals("7")){

                            userInvestExcelByDate.setRegSource("微信公众号");

                        }else if(list.get(j).getRegSource().equals("8")){

                            userInvestExcelByDate.setRegSource("红包");

                        }else if(list.get(j).getRegSource().equals("9")){

                            userInvestExcelByDate.setRegSource("转盘");

                        }else if(list.get(j).getRegSource().equals("77")) {

                            userInvestExcelByDate.setRegSource("微信");

                        }else{

                            userInvestExcelByDate.setRegSource("未知");

                        }

                    }

                    userInvestExcelByDate.setRegTime(list.get(j).getRegTime());

                    userInvestExcelByDate.setAuthTime(list.get(j).getAuthTime());

                    userInvestExcelByDate.setChannel(list.get(j).getChannel());

                    userInvestExcelByDate.setResultName(list.get(j).getResultName());

                    userInvestExcelByDate.setYqrName(list.get(j).getYqrName());

                    userExcelList.add(userInvestExcelByDate);

                }

                // 遍历集合数据,产生数据行

                XSSFRow rowTemp =  null;

                XSSFCell cellTemp =  null;

                for(int p = 0;p < userExcelList.size();p++){

                    UserInvestExcel require = userExcelList.get(p);

                    rowTemp = sheet.createRow(p+1);

                    //产生数据

                    int count = 0;

                    cellTemp  = rowTemp.createCell(count++);

                    cellTemp.setCellValue(require.getUserId());

                    cellTemp  = rowTemp.createCell(count++);

                    cellTemp.setCellValue(require.getLoginName());

                    cellTemp  = rowTemp.createCell(count++);

                    if(require.getRealName()!=null){

                        cellTemp.setCellValue(require.getRealName());

                    }else{

                        cellTemp.setCellValue("");

                    }

                    cellTemp  = rowTemp.createCell(count++);

                    if(require.getIdno()!=null){

                        cellTemp.setCellValue(require.getIdno());

                    }else{

                        cellTemp.setCellValue("");

                    }

                    cellTemp  = rowTemp.createCell(count++);

                    if(require.getBoundPhone()!=null){

                        cellTemp.setCellValue(require.getBoundPhone());

                    }else{

                        cellTemp.setCellValue("");

                    }

                    cellTemp  = rowTemp.createCell(count++);

                    if(require.getBankCard()!=null){

                        cellTemp.setCellValue(require.getBankCard());

                    }else{

                        cellTemp.setCellValue("");

                    }

                    cellTemp  = rowTemp.createCell(count++);

                    if(require.getRegSource()!=null){

                        cellTemp.setCellValue(require.getRegSource());

                    }else{

                        cellTemp.setCellValue("");

                    }

                    cellTemp  = rowTemp.createCell(count++);

                    if(require.getRegTime()!=null){

                        cellTemp.setCellValue(sdf.format(require.getRegTime()).toString());

                    }else{

                        cellTemp.setCellValue("");

                    }

                    cellTemp  = rowTemp.createCell(count++);

                    if(require.getAuthTime()!=null){

                        cellTemp.setCellValue(sdf.format(require.getAuthTime()).toString());

                    }else{

                        cellTemp.setCellValue("");

                    }

                    cellTemp  = rowTemp.createCell(count++);

                    if(require.getChannel()!=null){

                        cellTemp.setCellValue(require.getChannel());

                    }else{

                        cellTemp.setCellValue("");

                    }

                    cellTemp  = rowTemp.createCell(count++);

                    if(require.getResultName()!=null){

                        cellTemp.setCellValue(require.getResultName());

                    }else{

                        cellTemp.setCellValue("");

                    }

                    cellTemp  = rowTemp.createCell(count++);

                    if(require.getYqrName()!=null){

                        cellTemp.setCellValue(require.getYqrName());

                    }else{

                        cellTemp.setCellValue("");

                    }

                }

                response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName).getBytes(), "ISO-8859-1"));//设定输出文件头

                response.setContentType("application/vnd.ms-excel;charset=UTF-8");// 定义输出类型

                outStream = response.getOutputStream();

            }

            workBook.write(outStream);

            outStream.close();

            logger.info(MyUtils.getUser(request).getUserRename()+".................");

            this.saveLog(request, "导出成功" , null);

        } catch (Exception e) {

            // TODO: handle exception

            logger.error(MyUtils.getUser(request).getUserRename()+":::"+e.getMessage());

            this.saveLog(request, "导出失败" , e.getMessage());

        }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java poi 大数据 需求