将数据库中的数据以EXCEL表格形式导出

 @Override
    public void exportInventoryUserInfoData(String param, HttpServletResponse response) {
        HSSFWorkbook wb=null;
        OutputStream os=null;
        List<Map<String,Object>>  list = new ArrayList<Map<String,Object>>();
        int sheetCount=0;
        try {
            TCBmUserInfo tcBmUserInfo1 = JSONObject.parseObject(param).getObject("TCBmUserInfo", TCBmUserInfo.class);
            //根据查询条件 从数据库中获取所有数据
            List<Map<String,Object>> userInfos=userInfoDao.queryUserInfoData(tcBmUserInfo1);
            logger.info(" exportInventoryUserInfoData is userInfos    :"+userInfos);
             wb=new HSSFWorkbook();
                //总共多少个sheet页 能被5整除
            if (userInfos.size()%65536==0){
                 sheetCount = userInfos.size()/65536;
            }else {
                //总共多少个sheet页 不能被5整除
                sheetCount = userInfos.size()/65536 + 1;
            }
                //对sheet页进行遍历
                for (int i = 0 ; i < sheetCount ; i++){
                   list.clear();
                    //采用Math.min方法获取较小的值,防止空指针异常
                    int minNumber = Math.min((i + 1) * 65536, userInfos.size());
                    for (int j = i*5 ; j < minNumber ; j++){
                        list.add(userInfos.get(j));
                    }
                    //创建sheet页
                    HSSFSheet sheet1 = wb.createSheet(excelInfoProperties.getSheet() + (i+1));
                    //调用往sheet页中写入数据的方法
                    eachInfo(list,sheet1);
                }
            //获取输出流
            os=response.getOutputStream();
            //定义输出Excel文件名,防止中文乱码
            String encode = URLEncoder.encode(excelInfoProperties.getFileName(), excelInfoProperties.getEncode());
            response.setContentType("application/msexcel");// 定义输出类型
            response.setHeader("Content-disposition", "attachment;filename=" + encode+ ".xls;filename*=utf-8''"+encode+".xls"); //兼容不同浏览器的中文乱码问题
            response.setCharacterEncoding(excelInfoProperties.getEncode());
            wb.write(os);
        }catch (IOException e){
            logger.error("exportInventoryUserInfoData:" +e.getMessage());
        }finally {
            if (wb!=null){
                try {
                    wb.close();
                } catch (IOException e) {
                    logger.error("exportInventoryUserInfoData  wb :" +e.getMessage());
                }
            }
            if(os!=null){
                try{
                    os.flush();
                }catch(Exception e) {
                    logger.error("exportInventoryUserInfoData  os.flush():" +e.getMessage());
                }
                try {
                    //关闭流
                    os.close();
                } catch (IOException e) {
                    logger.error("exportInventoryUserInfoData  os.close():" +e.getMessage());

                }
            }
        }
    }

    @Override
    public Object doLogin(String param) {
        JSONObject jsonObject = JSONObject.parseObject(param);
        String username = jsonObject.getString("username");
        String password = jsonObject.getString("password");
        if ("admin".equals(username) && "admin123".equals(password)){
            return null;
        }else {
            throw new RuntimeException("账号不存在");
        }
    }

    /**
     * 往Excel里插入数据
     * @param userInfos
     * @param sheet
     */
    private void eachInfo(List<Map<String,Object>> userInfos,HSSFSheet sheet){
        HSSFRow row=null;
        //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
        CellRangeAddress region1 = new CellRangeAddress(0, 0, (short) 0, excelInfoProperties.getTerminateColumn() );
        sheet.addMergedRegion(region1);
        //创建第一个单元格
        row=sheet.createRow(0);
        row.setHeight((short)(excelInfoProperties.getHight()));
        row.createCell(0).setCellValue(excelInfoProperties.getCellValue());
        //Excel标题行插入数据
        row=sheet.createRow(1);
        //表行值用一个字符串变量来代替
        String key = excelInfoProperties.getKey();
        //对字符串变量进行分割
        String[] keySplit = key.split(",");
        //对数组进行遍历,并设置表行值
        for (int i = 0; i < keySplit.length; i++) {
            row.createCell(i).setCellValue(keySplit[i]);
        }
        List<String> list=new ArrayList<String>();
        //对所有数据进行遍历
        for (int i = 0; i < userInfos.size(); i++) {
            //创建单元格
            row = sheet.createRow( i+2);
            Map<String,Object>  map = userInfos.get(i);
            //每次循环前对数组进行清空
            list.clear();
            list.add((String) map.get("username"));
            list.add((String) map.get("phone_number"));
            list.add((String) map.get("address"));
            list.add((String) map.get("speed_progress"));
            list.add((String) map.get("handl_bank"));
            list.add((String) map.get("recommend_people"));
            list.add( map.get("create_time").toString().substring(0,19));
            list.add((String) map.get("repayment_method"));
            list.add((String) map.get("repayment_period"));
            list.add((String) map.get("property_info"));
            list.add((String) map.get("social_info"));
            //j代表固定的单元格个数,list.get(j)  代表的是每个单元格所对应的对象属性值
            for (int j = 0; j <list.size(); j++) {
                row.createCell(j).setCellValue(list.get(j));
            }
        }
        //设置默认行高
        sheet.setDefaultRowHeight((short) (excelInfoProperties.getDefaultHight()));
        //列宽自适应
        for (int i = 0; i <= excelInfoProperties.getiValue(); i++) {
            sheet.autoSizeColumn(i);
            sheet.setColumnWidth(i, excelInfoProperties.getColumnWidth());
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值