POI 导出Excel文档

1 篇文章 0 订阅
    /**
     * 创建ExcelFile文件流
     * @param sheetNameArray 每个sheet页的名字
     * @param titles 每个sheet页的表头
     * @param cellValue 每行数据在map中的字段, 一定要和titles严格对应(如果list无数据, 则可以不传)
     * @param objects[] { List<Map<String, Object>> } 每个sheet页的数据
     * @return 文件流
     */
    @SuppressWarnings({ "deprecation", "resource" })
    public void createExcelFileInputStream(String[] sheetNameArray, 
            String[][] titles, String[][] cellValue, Object[] objects,
            OutputStream os) {

        // 第一步,创建一个workbook,对应一个Excel文件
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet xssfSheet = null;
        for( int index = 0; index < sheetNameArray.length; index++ ) 
        {
            String sheetName = sheetNameArray[index];
            // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
            xssfSheet = workbook.createSheet(sheetName);
            // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
            XSSFRow xssfRow = xssfSheet.createRow(0);
            // 第四步,设置表头样式和表头居中
            XSSFCellStyle xssfCellStyle = workbook.createCellStyle();
            //居中样式
            xssfCellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
            xssfCellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 垂直
            xssfCellStyle.setFillForegroundColor(HSSFColor.CORNFLOWER_BLUE.index);// 设置背景色
            xssfCellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
            XSSFFont font = workbook.createFont();
            font.setFontName("仿宋_GB2312");
            font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 粗体显示
            font.setFontHeightInPoints((short) 12); // 字体大小
            xssfCellStyle.setFont(font);

            // 第五步 创建单元格, 并将表头写入
            if(titles != null && titles.length != index)
            {
                int len = titles[index].length;
                XSSFCell hssfCell;
                for(int i = 0; i < len; i++)
                {
                    hssfCell = xssfRow.createCell(i);
                    hssfCell.setCellValue(titles[index][i]);//列名2
                    hssfCell.setCellStyle(xssfCellStyle);
                }
                // 第六步,写入实体数据
                if(objects != null && objects.length != index 
                        && objects[index] != null)
                {
                    List<Map<String, Object>> list = (List<Map<String, Object>>)objects[index];
                    if( (len = list.size()) > 0 )
                    {
                        for (int i = 0; i < len; i++) 
                        {
                            xssfRow = xssfSheet.createRow(i+1);
                            // 第七步,创建行、单元格,并设置值
                            Map<String, Object> map = new HashMap<String, Object>(list.get(i));
                            for(int j = 0; j < cellValue[index].length; j++){
                                xssfRow.createCell(j).setCellValue(MapUtils.getString(map, cellValue[index][j]));
                            }
                        }
                    }
                }
            }
        }
        // 第八步,将文件存到指定位置
        try {
            workbook.write(os);
            os.close();
        } catch (Exception e) {
            logger.error("createExcelFileInputStream is error, msg is : " + e.toString());
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值