从数据库导出excel表(查询数据的集合为map)

FileOutputStream stream = null;
        try {
            //定义EXCEL第一行标题
            String title = "资产管理";
            
            //创建英文和中文键值对集合
            Map<String, String> ecMap = new HashMap<String, String>();
            //创建英文键值对集合
            List<String> eList = new  ArrayList();
            //遍历通过sql查询到的值进行遍历,这个值是字段名字和注释
            for (Map map : list) {
                //取英文
                eList.add(map.get("COLUMN_NAME").toString());
                //取键:英文 和 值:中文注释字段
                ecMap.put(map.get("COLUMN_NAME").toString(), map.get("COMMENTS").toString());
            }
            //创建workbook这个操作excel的
            HSSFWorkbook workbook = new HSSFWorkbook();
            //通过workbook创建sheet,sheet就是excel的当前页(并且放入标题)
            HSSFSheet sheet = workbook.createSheet(title);
            //通过workbook规范字体
            HSSFFont ztFont = workbook.createFont();
            ztFont.setBoldweight(ztFont.BOLDWEIGHT_BOLD);
            HSSFCellStyle cellStyle =workbook.createCellStyle();
            cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            //最后确定样式
            cellStyle.setFont(ztFont);
            
            //创建第一行表头,当然通过sheet创建了,因为sheet是第一页
            //里面的(0)代表的索引,第一页东西
            HSSFRow row = sheet.createRow(0);
            //取第一行的索引
            HSSFCell cell = row.createCell(0);
            //赋值
            cell.setCellValue(title);
            //改变样式
            cell.setCellStyle(cellStyle);
            
            //创建合并单元格
            Region region = new Region(0,new Short("0"),0,new Short(""+(ecMap.size()-1)));
            //调出sheet方法把已经合并好的单元格添加进去
            sheet.addMergedRegion(region);
            HSSFRow row2 = sheet.createRow(1);
            //创建第二行,把中文注释的字段放入第二行
            for (int i = 0; i < eList.size(); i++) {
                HSSFCell hssfCell = row2.createCell(i);
                //这段代码就是把值赋到里面,调用ecMap中文和英文键值,取elist的第几行就是ecMap第几个值
                hssfCell.setCellValue(ecMap.get(eList.get(i).toString()));
            }
        
            //添加数据
            for (int i = 0; i <dateList.size(); i++) {
                row = sheet.createRow(i+2);
                Map map = dateList.get(i);
                for (int j = 0; j < eList.size(); j++) {
                    String colName = eList.get(j);
                    HSSFCell cell2 = row.createCell(j);
                    if(ecMap.get(colName).equals("购买日期")){
                        //运用三目进行判断,如果该字段厘米那的数据没有,则为null,否则就用该数据
                        cell2.setCellValue(map.get(colName)==null?"":map.get(colName).toString().substring(0,10));
                    }else{
                        //运用三目进行判断,如果该字段厘米那的数据没有,则为null,否则就用该数据
                        cell2.setCellValue(map.get(colName)==null?"":map.get(colName).toString());
                    }
                }
            }
//创建数据流,把改好的数据放入excel中 stream = new FileOutputStream("D:\\资产管理模版.xls"); //使用workbook写入 workbook.write(stream); } catch (Exception e) { e.printStackTrace(); }finally{ try {


 

stream.flush(); stream.close(); } catch (IOException e) { e.printStackTrace(); } } }
//查询的集合
List<Map> list = selectDataService.queryForList("select a.column_name,a.comments from user_col_comments a where a.table_name ='T_ASSET' and a.comments is not null"); List<Map> dateList = selectDataService.queryForList (" select a.id \"id\",a.num \"num\",a.name \"name\",t.name \"typeid\",a.status \"status\" ,a.buydate \"buydate\",u.realname \"userid\",a.price \"price\",w.name \"factory\",a.content \"content\" from t_asset a ,t_assettype t ,t_factory w,t_user u where a.typeid = t.id(+) and a.factory = w.id(+) and a.userid = u.id(+) ");

 

posted @ 2015-11-18 13:43  小心火烛  阅读(1254)  评论(0编辑  收藏  举报