springmvc poi实现报表导出

1.pom文件:

     <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
               <artifactId>poi-ooxml</artifactId>
               <version>3.15</version>
        </dependency>

2.controller 根据需要组装数据:

private List<Map<String, Object>> createList(List<User> users){
        if(null == users) {
            return null;
        }
        String[] keys = {"name", "gender", "phoneNo", "email"};
        String[] excelHeader = {"姓名","性别", "手机号", "邮箱"};
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        Map<String, Object> model = new HashMap<String, Object>();
        model.put("fileName", "用户表" + new Date().getTime());
        model.put("sheetName", "表一");
        model.put("title", "用户表");
        model.put("keys", keys);
        model.put("excelHeader", excelHeader);
        list.add(model);

        for(User user : users) {
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("name", user.getName());
            map.put("gender", user.getGender());
            map.put("phoneNo", user.getPhoneNo());
            map.put("email", user.getEmail());
            list.add(map);
        }
        return list;
    }

3.ExcelUtil:

  

private static final Logger        LOG    = LoggerFactory.getLogger(ExcelUtil.class);

    /**创建一个excel文件*/
    private static Workbook createWorkBoot(String title,
            String[] excelHeader, List<Map<String, Object>> list, String[] keys) {
        Workbook workbook = new HSSFWorkbook();
        //设置sheet的名字
        Sheet sheet = workbook.createSheet(list.get(0).get("sheetName").toString());
        /*设置表格宽度*/
        for(int i = 0; i < keys.length; i++){
            sheet.setColumnWidth(i, 35*150);
        }

        /*font样式设置字体大小,是否加粗*/
        Font titleFont = createFont(workbook, (short)20, true);
        Font headerFont = createFont(workbook, (short)12, true);
        Font bodyFont = createFont(workbook, (short)12, false);
        /*cell通用样式*/
        CellStyle titleStyle = createStyle(workbook, titleFont);
        CellStyle headerStyle = createStyle(workbook, headerFont);
        CellStyle bodyStyle = createStyle(workbook, bodyFont);

        // excel中当前行索引
        int index = 0;
        /*合并标题的单元格设置标题信息及样式 */
        sheet.addMergedRegion(new CellRangeAddress(index, index, index,
                excelHeader.length - 1));
        Row titleRow = sheet.createRow(index++);
        Cell titleCell = titleRow.createCell(0);
        titleCell.setCellValue(title);
        titleCell.setCellStyle(titleStyle);

        /*设置表格头信息及样式*/
        Row headerRow = sheet.createRow(index++);
        for(int i = 0; i < excelHeader.length; i++) {
            Cell headerCell = headerRow.createCell(i);
            headerCell.setCellValue(excelHeader[i]);
            headerCell.setCellStyle(headerStyle);
        }

        /*设置每行每 列的值及样式
         *Row为行,cell为方格
         *创建i*j个方格并设置对应的属性值*/
        for(int i = 1; i < list.size(); i++) {
            Row bodyRow = sheet.createRow(index++);
            for (int j = 0; j < keys.length; j++) {
                Cell bodyCell = bodyRow.createCell(j);
                bodyCell.setCellValue(list.get(i).get(keys[j]) == null ?
                        " " : list.get(i).get(keys[j]).toString());
                bodyCell.setCellStyle(bodyStyle);
            }
        }
        return workbook;
    }

    /**设置字体大小,颜色,样式,是否加粗*/
    private static Font createFont(Workbook workbook,
            short fontHeightInPoints, boolean isBlod) {
        Font font = workbook.createFont();
        //字体大小
        font.setFontHeightInPoints(fontHeightInPoints);
        //字体颜色
        font.setColor(IndexedColors.BLACK.getIndex());
        //字体样式
        font.setFontName("宋体");
        //是否加粗
        font.setBold(isBlod);
        return font;
    }

    /**设置字体居中显示,背景色,边框*/
    private static CellStyle createStyle(Workbook workbook, Font font) {
        CellStyle cellStyle = workbook.createCellStyle();
        cellStyle.setFont(font);
        //居中
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
        //背景颜色
        cellStyle.setFillForegroundColor(IndexedColors.WHITE.index);
        cellStyle.setFillBackgroundColor(IndexedColors.WHITE.index);
        cellStyle.setFillPattern(FillPatternType.FINE_DOTS);
        //边框
        cellStyle.setBorderBottom(BorderStyle.THIN);
        cellStyle.setBorderLeft(BorderStyle.THIN);
        cellStyle.setBorderRight(BorderStyle.THIN);
        cellStyle.setBorderTop(BorderStyle.THIN);
        return cellStyle;
    }

    public static boolean exportExcel(HttpServletResponse response,List<Map<String, Object>> list) throws IOException {
        String fileName = list.get(0).get("fileName").toString();
        String[] excelHeader = (String [])list.get(0).get("excelHeader");
        String[] keys = (String [])list.get(0).get("keys");
        String title = list.get(0).get("title").toString();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
            createWorkBoot(title, excelHeader, list, keys).write(baos);
        } catch (IOException e) {
            LOG.error("将workbook中信息写入输出流时失败");
            return false;
        }
        byte[] content = baos.toByteArray();
        InputStream is = new ByteArrayInputStream(content);

        response.reset();
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            response.setHeader("Content-Disposition", "attachment;filename="
                    + new String((fileName + ".xls").getBytes(), "iso-8859-1"));
            ServletOutputStream sos = response.getOutputStream();
            bis = new BufferedInputStream(is);
            bos = new BufferedOutputStream(sos);
            byte[] buff = new byte[2048];
            int byteRead = 0;
            while (-1 != (byteRead = bis.read(buff, 0, buff.length))) {
                bos.write(buff, 0, byteRead);
            }
        } catch (IOException e) {
            LOG.error("创建excel文件时失败");
            return false;
        } finally {
            if (bos != null)
                bos.close();
            if (bis != null)
                bis.close();
            if(is != null)
                is.close();
            if(baos != null)
                baos.close();
        }
        return true;
    }

导出效果

  

时间: 2024-09-30 06:55:26

springmvc poi实现报表导出的相关文章

kettle工具实现报表导出的初步搭建

1.下载kettle 国外网站:http://kettle.pentaho.org/需要FQ,下载慢 2.下载完成启动(windows)-->spoon.bat 3.进入界面,两个主要的tab页 4.第二个tab页里用到的 5. 第一步设定REST接口需要的参数(比如URL) 第二步调用REST接口 第三步使用JSON控件接收REST返回数据 第四步将返回数据输出到Excel中 6.url返回的json数据 7.运行结果: 8.如果自己链接数据库的话,会缺少数据库驱动,需要在lib包下面加上,如

java报表导出

在项目中一般导出报表用poi,但是如果你不想用框架就用简单的jsp也可以实现报表导出.而且实现起来还特别简单.先看一下效果截图: 点击导出后的效果截图: 具体实现: 第一:在页面的列表页面中就是普通的iterator源码如下: <table class="list_tab"> <tr class="head"> <th>序号</th> <th width="20px"><input

POI 实现Excel 导出案例分析

无论使用poi还是使用jxl导出excel都需要用到流一种是outputstrean,另一种fileoutputstream第一种: 如果想要弹出保存的提示框必须加入下列三句response.setContentType("application/vnd.ms-excel; charset=utf-8");response.setHeader("Content-Disposition","attachment;filename="+filenam

【HOW】如何限制Reporting Services报表导出功能中格式选项

Reporting Services报表导出功能中缺省会提供多种导出格式选项,但很多情况下不需要全部的格式选项,因此需要对这些选项进行限制.下面我们以SQL Server 2008 R2为例来说明对这些选项进行限制的方法. 1. 打开报表服务配置文件:"C:\Program Files\Microsoft SQL Server\MSRS10_50.QUIST\Reporting Services\Report Server\ rsreportserver.config". 2. 在上述

Silverlight程序之:简单的Excel报表导出方法

Silverlight程序之:简单的Excel报表导出方法 概述 介绍一种简单的Excel报表导出方法. 页面效果 导出效果: 首先我们创建一个Excel表格,将我们的基本信息格式都设置好,如下图所示: 将创建好的Excel表格另存为网页. 打开VS将创建好的报表模版网页文件拖到Web项目新建的Report文件夹 修改其后缀名为aspx 打开文件 添加头部代码 <%@ Page Language="C#" ContentType="application/vnd.ms-

SAP关于标准ALV报表导出Excel的问题与解决:长数字

SAP关于标准ALV报表导出Excel的问题与解决:长数字 描述:在使用标准ALV功能时,使用本地文件可以把内容导到EXCEL中 问题:如果在报表中有类似银行账户.身份证号等较长数字的字段,直接导出EXCEL,在EXCEL中这些字段将会使用科学计数法的格式显示导致这列数据不正确. 解决方法一:导出时选择未转换的格式,然后再整理(分列) 解决方法二:使用ALV工具栏中按钮Excel适当位置 解决方法三:导出—电子表格—所有可用格式(选择“在现有XXL格式中”) ALV 导出电子表格的文件格式固定了

appache POI 导入和导出

项目结构: 用到的Excel文件: XlsMain .java 类 //该类有main方法,主要负责运行程序,同时该类中也包含了用poi读取Excel(2003版) 1.  import java.io.FileInputStream; 2.  import java.io.IOException; 3.  import java.io.InputStream; 4.  import java.util.ArrayList; 5.  import java.util.List; 6. 7.  i

java 使用poi 结合Struts2导出execl表格

第一步写action方法: public String exportActiveExcel() { String name ="活跃度列表.xls"; try { name = java.net.URLEncoder.encode(name, "UTF-8"); fileName = new String(name.getBytes(), "iso-8859-1"); } catch (UnsupportedEncodingException e

apache poi根据模板导出excel

需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.user