POI在一个excel中动态生成多个sheet工作薄

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38795959/article/details/79241727

public void downLoadDept( HttpServletResponse response) throws Exception{

   PageData pd = new PageData();//创建对象
   List taskList =(List) dao.findForList("taskMapper.taskCombox",pd);//获取所有主任务

   String title = "机构信息";//标题
   String[] titleList = new String[]{"部门编号", "部门名称", "所属部门编号", "品类", "if36", "ifup","备注"};//表头数组
   String[] titleColumnList = new String[]{"DEPT_CODE", "DEPT_NAME", "PID", "INDUSTRY_ID","IF_BIGCITY", "", "REMARK"};//字段数据
   int cellNumber = titleList.length;//表头长度


   //创建webbook对象
   HSSFWorkbook wb = new HSSFWorkbook();
   //动态创建多个sheet
   for (int i= 0; i

       String taskName = taskList.get(i).get("NAME").toString(); //获取主任务名称
       String taskid = taskList.get(i).get("ID").toString();//获取主任务id
       pd.put("TASK_ID",taskid);//将主任务id,存入对象中
       //根据主任务id,获取部门信息
       List deptList = (List)dao.findForList("DeptMapper.findBySubtaskId",pd);

       //创建sheet
       HSSFSheet sheet = wb.createSheet();
       //设置sheet名称
       wb.setSheetName(i,taskName);
       //获取sheet
       HSSFSheet sheetinput = wb.getSheetAt(i);
       //在sheet第1行中添加表头
       HSSFRow headerRow = sheetinput.createRow((short) 0);
       //设置单元格样式
       HSSFCellStyle style = getExcelStyle(wb);
       //创建表头单元格
       HSSFCell headerCell = null;
       //遍历表头
       for (int k = 0; k < cellNumber; k++) {
           headerCell = headerRow.createCell((short) k); //单元格titleList[k]
           headerCell.setCellValue(titleList[k]);//给单元格赋值
           headerCell.setCellStyle(style);//单元格样式
           sheet.setColumnWidth((short) k, (short) 5766); //设置单元格宽度
       }

       //循环遍历数据,存入excel中
       for (int v = 0; v < deptList.size();v++) {

           PageData single = deptList.get(v);

           HSSFRow dataRow = sheet.createRow((short) v + 1);//创建行
           HSSFCell contentCell = null;//创建单元格
           for (int j = 0; j < cellNumber ; j++) {
               String TABLE_COLUMN = titleColumnList[j];
               String VALUE = "";
               //判断map中是否存在key,并且判断key的值是否为空
               if(single.containsKey(TABLE_COLUMN) && single.get(TABLE_COLUMN) != null && !single.get(TABLE_COLUMN).toString().equals("")){
                    if(TABLE_COLUMN.equals("IF_BIGCITY")){

                        VALUE = single.get(TABLE_COLUMN).toString().equals("1")? "是":"否";

                    }else if(TABLE_COLUMN.equals("INDUSTRY_ID") && single.get("INDUSTRY_ID") != null && (!single.get("INDUSTRY_ID").equals(""))){

                            String INDUSTRY_IDS = single.get("INDUSTRY_ID").toString();//获取品类id字符串
                            List ids = new ArrayList();//创建list对象
                            String[] arr = INDUSTRY_IDS.split(",");//将字符串转化成数组
                            for (int s = 0; s < arr.length; s++) {//遍历数组,将数据放入到对象中
                                ids.add(arr[s]);
                            }
                            pd = new PageData();
                            pd.put("ids", ids);//将list放入map中
                            //根据品类id,获取到品类名称
                            List listName = (List) dao.findForList("DeptMapper.findByIndustryId", pd);
                            String name = "";
                            for(int n=0;n
                                name +=listName.get(n).get("INDUSTRY_NAME")+",";
                            }
                            if(name.length()>0){
                                name = name.substring(0,name.length()-1);
                            }
                            VALUE = name;
                    }else{

                        VALUE = single.get(TABLE_COLUMN).toString();
                    }
               }
               contentCell = dataRow.createCell((short)j);//单元格
               contentCell.setCellValue(VALUE);//单元格赋值
           }
           contentCell.setCellStyle(style);//行添加样式
       }
   }
   //浏览器下载
   OutputStream os=null;
   try {
       os = response.getOutputStream();// 取得输出流
       response.reset();// 清空输出流
       response.setHeader("Content-disposition", "attachment; filename=" + new String((title+".xls").getBytes("UTF-8"), "ISO8859-1"));
       response.setContentType("text/html;charset=UTF-8");
       response.setContentType("application/x-excel");
       wb.write(os);
       os.close();
   } catch (IOException e) {
       e.printStackTrace();
   }finally {
       try {
           os.close();
       } catch (IOException e) {
           e.printStackTrace();
       }
   }

}

public static HSSFCellStyle getExcelStyle(HSSFWorkbook wb) {
    HSSFCellStyle style = wb.createCellStyle();
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
    HSSFFont font = wb.createFont();
    font.setColor(HSSFColor.BLACK.index);//字体颜色
    font.setFontHeightInPoints((short) 12);//字体大小
    font.setFontName("宋体");//字体
    style.setFont(font);
    style.setWrapText(true);//自动换行
    return style;
}

猜你喜欢

转载自blog.csdn.net/qq_38795959/article/details/79241727