@RequestMapping(value = "downloadExcel", method = RequestMethod.GET)
 public String download(HttpServletRequest request,HttpServletResponse response) throws IOException{
        String fileName="excel文件";
        //填充projects数据
        ExcelUtil excelUtil = new ExcelUtil();
        List<Project> projects = excelUtil.createData();
        List<Map<String,Object>> list = excelUtil.createExcelRecord(projects);
        String columnNames[]={"ID","项目名","销售人","负责人","所用技术","备注"};//列名
        String keys[]   =    {"id","name","saler","principal","technology","remarks"};//map中的key
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        try {
            ExcelUtil.createWorkBook(list,keys,columnNames).write(os);
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] content = os.toByteArray();
        InputStream is = new ByteArrayInputStream(content);
        // 设置response参数,可以打开下载页面
        response.reset();
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename="+ new String((fileName + ".xls").getBytes(), "utf-8"));
        ServletOutputStream out = response.getOutputStream();
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(is);
            bos = new BufferedOutputStream(out);
            byte[] buff = new byte[2048];
            int bytesRead;
            while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                bos.write(buff, 0, bytesRead);
            }
            bos.flush();
        } catch (final IOException e) {
         
         logger.error("导出Excel异常:",e);
            throw e;
        } finally {
            if (bis != null)
                bis.close();
            if (bos != null)
                bos.close();
        }
        return null;
    }
 
 /**
     * 导出Excel
     * @param request
     * @param response
     */
 @RequestMapping(value = "ProcessRequestExcel", method = RequestMethod.GET)
    public void ProcessRequest(HttpServletRequest request,HttpServletResponse response){
        java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyyMMddhhmmss");
        String now = format.format(new Date());
        String exportFileName = "信息导出_"+now+".xls";//导出文件名
        List<Basicinfo> list = getInfoList();
        HSSFWorkbook workBook = null;
        String[] cellTitle = {"序号", "姓名", "性别", "部门"};
        try {
            workBook = new HSSFWorkbook();//创建工作薄
            HSSFSheet sheet = workBook.createSheet();
            workBook.setSheetName(0, "订单信息");//工作簿名称
            HSSFFont font = workBook.createFont();  
            font.setColor(HSSFFont.COLOR_NORMAL);
            font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            HSSFCellStyle cellStyle = workBook.createCellStyle();//创建格式
            cellStyle.setFont(font);
            cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            //创建第一行标题
            HSSFRow titleRow = sheet.createRow((short) 0);//第一行标题
            for(int i = 0,size = cellTitle.length; i < size; i++){//创建第1行标题单元格    
                sheet.setColumnWidth(i,4000);
                HSSFCell cell = titleRow.createCell(i,0);        
                cell.setCellStyle(cellStyle);
                cell.setCellValue(cellTitle[i]);
            }
            //从第二行开始写入数据
            for(int i=1,size = list.size();i<size;i++){
                HSSFRow row = sheet.createRow((short) i);
                Basicinfo entity = list.get(i);
                for (int j = 0,length=cellTitle.length; j < length; j++) {
                    HSSFCell cell = row.createCell(j, 0);// 在上面行索引0的位置创建单元格
                    cell.setCellType(HSSFCell.CELL_TYPE_STRING);// 定义单元格为字符串类型
                    switch(j){// 在单元格中输入一些内容
                    case 0:
                        cell.setCellValue(String.valueOf(i));
                        break;
                    case 1:
                        cell.setCellValue(entity.getName());
                        break;
                    case 2:
                        cell.setCellValue(entity.getSex());
                        break;
                    case 3:
                        cell.setCellValue(entity.getDepart());
                        break;
                    }
                }
            }
             
            // 表示以附件的形式把文件发送到客户端
            response.setHeader("Content-Disposition", "attachment;filename=" + new String((exportFileName).getBytes(), "ISO8859-1"));//设定输出文件头
            response.setContentType("application/vnd.ms-excel;charset=UTF-8");// 定义输出类型
             
            // 通过response的输出流把工作薄的流发送浏览器形成文件
            OutputStream outStream = response.getOutputStream();
            workBook.write(outStream);
            outStream.flush();
            outStream.close();
        }catch(IOException e){
            System.out.println("IO 异常!"+e.getMessage());
            e.printStackTrace();
        }finally{
         
        }
    }
     
    /**
     * 模拟数据库获取信息
     * @return
     */
    @SuppressWarnings("unchecked")
 public List<Basicinfo> getInfoList(){
        List<Basicinfo> list = new ArrayList();
        for(int i=1;i<101;i++){
            Basicinfo entity = new Basicinfo();
            entity.setName("员工"+i);
            entity.setSex(i%2==1?"男":"女");
            entity.setDepart(i>80?"销售部":"财务部");
            list.add(entity);
        }
        return list;
    }
 

Java导出Excel的Springmvc实例的更多相关文章

  1. java导出excel报错:getOutputStream() has already been called for this response

    对于java导出excel报错的问题,查了很多都说是在使用完输出流以后调用以下两行代码即可 out.clear(); out = pageContext.pushBody(); 但这也许是页面上输出时 ...

  2. java导出excel表格

    java导出excel表格: 1.导入jar包 <dependency> <groupId>org.apache.poi</groupId> <artifac ...

  3. java导出excel报表

    1.java导出excel报表: package cn.jcenterhome.util; import java.io.OutputStream;import java.util.List;impo ...

  4. Java导出Excel和CSV(简单Demo)

    Java导出Excel和CSV的简单实现,分别使用POI和JavaCSV. JavaBean public class ReportInfo { int id; String date; int nu ...

  5. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  6. java导出excel模板数据

    Java导出excel数据模板,这里直接贴代码开发,流程性的走下去就是步骤: String[] colName=new String[]{"期间","科目代码" ...

  7. java导出excel工具类

    java导出excel须要使用HSSFWorkbook这个类,须要导入poi-3.6-20091214.jar 工具类调用例如以下: package com.qlwb.business.util; i ...

  8. [转载]Java导出Excel

    一.需求介绍 当前B/S模式已成为应用开发的主流,而在开发企业办公系统的过程中,常常有客户这样子要求:把系统数据库中的数据导出到Excel,用户查看报表时直接用Excel打开.或者是:用户已经习惯用E ...

  9. java 通过Apache poi导出excel代码demo实例

    package com.zuidaima.excel.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutput ...

随机推荐

  1. 微信小程序 组件通信相关知识整理

    1.自定义组件间通信与事件 https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.htm ...

  2. 【开发记录】如何在B/S项目中使用中国天气的实时天气功能

    好久没有更新我的博客了,正好手头有一个比较合适的项目经验可以分享出来,就是这个如何使用中国天气的天气预报功能,也正好做个项目经验记录. 功能需求 这个功能需求比较简单,就是想在网页端显示实时天气数据. ...

  3. Android app去掉https签名校验

    本文同步至http://javaexception.com/archives/30 问题: 之前的一个开源项目碰到了一个问题,Fix CertPathValidatorException: Trust ...

  4. 读书笔记:深入理解java虚拟机(一)虚拟机的运行时的数据区域

    最近在看深入了解java虚拟机第一版(周志明著),特此写读书笔记,整理其中重要的东西和自己的理解. ”java与c++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却 ...

  5. SQL Server使用sp_spaceused查看表记录存在不准确的情况

    在之前写过一篇博客"关系数据库如何快速查询表的记录数",里面介绍了使用sp_spaceused查看表的记录数是否正确的问题,具体如下:   关于问题3:有多个索引的表,是否记录数会 ...

  6. dubbo 序列化机制之 hessian2序列化实现原理分析

    对于远程通信,往往都会涉及到数据持久化传输问题.往大了说,就是,从A发出的信息,怎样能被B接收到相同信息内容!小点说就是,编码与解码问题! 而在dubbo或者说是java的远程通信中,编解码则往往伴随 ...

  7. 使用前端技术和MySQL+PHP制作自己的一个个人博客网站

    源代码地址:https://github.com/YauCheun/BlogCode 我的博客网站地址:http://www.yublog.fun/ 制作前景: 想拥有一个自己独自开发的一个小型博客网 ...

  8. dubbo-springboot入门级demo

    1. dubbo-springboot入门级demo 1.1. 前言 最后一个做运维的朋友和我提起,他们公司想做个dubbo灰度发布的功能,而这个功能落到了他头上.在我的印象里,dubbo应该可以通过 ...

  9. 6. VIM 系列 - 全局搜索(ctrlsf.vim)

    目录 全局搜索利器 ag.vim 更强大的全局搜索利器 ctrlsf.vim 全局搜索利器 ag.vim 终端上安装ag: sudo apt install silversearcher-ag vim ...

  10. 高性能消息队列NSQ

    前言 最近我再网上寻找使用golang实现的mq,因为我知道golang一般实现的应用部署起来很方便,所以我就找到了一个叫做nsq的mq,其实它并不能完全称为队列,但是它的轻量和性能的高效,让我真的大 ...