Apache Poi导出Excel多Sheet页详解!

apache poi是目前比较常用导出excel的方式。最近想要实现一个导出excel多sheet页的功能。
网上查了一下大多都是针对某个具体对象的导出,不能实现任意对象的导出。现在将自己研究出的代码贴出来,供大家参考。


    //注意:此处实现的关键是将数据对象封装成List<Map<String,Object>>的形式,这样才能适合多个不同对
    //象的解析

    /** 
     * @Title: exportExcel 
     * @Description:  
     * @param workbook 工作薄
     * @param sheetNum (sheet的位置,0表示第一个表格中的第一个sheet) 
     * @param sheetTitle  (sheet的名称) 
     * @param headers    (表格的标题)  
     * @param list  (数据结果集的封装) 
     * @param keys 数据库列名
     * @throws Exception 
     */  
    public void exportExcel(HSSFWorkbook workbook, int sheetNum,  
           String sheetTitle, String[] headers, List<Map<String, Object>> list,String[] 
           keys) throws Exception {  
        // 声明一个工作薄  
        HSSFSheet sheet = workbook.createSheet();  
        try {
            //设置sheet页名称
            workbook.setSheetName(sheetNum, sheetTitle);  
        } catch (Exception e) {
            // TODO: handle exception
        }
        // 设置表格默认列宽度为20个字节  
         sheet.setDefaultColumnWidth((short) 20);  
        // 生成一个样式  
        HSSFCellStyle style = workbook.createCellStyle();  
        // 设置这些样式  
        style.setFillForegroundColor(HSSFColor.PALE_BLUE.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_CENTER);  
        // 生成一个字体  
        HSSFFont font = workbook.createFont();  
        font.setColor(HSSFColor.BLACK.index);  
        font.setFontHeightInPoints((short) 12);  
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);  

        // 把字体应用到当前的样式  
        style.setFont(font);  

        // 指定当单元格内容显示不下时自动换行  
        style.setWrapText(true);  

        // 产生表格标题行  
        HSSFRow row = sheet.createRow(0);  
        for (int i = 0; i < headers.length; i++) {  

            //创建单元格
            HSSFCell cell = row.createCell((short) i);  

            //设置单元格样式
            cell.setCellStyle(style);  

            //组装单元格值
            HSSFRichTextString text = new HSSFRichTextString(headers[i]);  

            //给单元格设置值
            cell.setCellValue(text.toString());  
        }  

        // 遍历集合数据,产生数据行  
        try {
          if (list.size() > 0) {  
              for (short i = 1; i < list.size(); i++) {

                    // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的
                    // 创建一行,在页sheet上
                    Row row1 = sheet.createRow((short) i);

                    // 在row行上创建一个方格
                    for (short j = 0; j < keys.length; j++) {

                        //创建数据单元格
                        Cell cell = row1.createCell(j);

                        //给单元格设置值,list<Map<String,Object>>在封装数据的时候key就是数据库
                        //表的字段名称,所以这儿通过key来取值判断。
                        cell.setCellValue(list.get(i).get(keys[j]) == null ? " " : 
                        list.get(i).get(keys[j]).toString());

                        //设置单元格样式
                        cell.setCellStyle(style);
                    }
                }
          }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }  

总结:要实现通用的excel导出,组装数据是关键。目前我这块觉得用map的方式是比较简单的。可能还有更简单的,希望大家多多指点!

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值