导入包这一些不多说,直接贴出关键代码,JSP只要点一个Action链接就行。

poi包我是用:poi-3.11-20141221.jar

亲测有效:

效果:

Action 类代码:

private InputStream inputStream; //(get,set方法省略)定义一个输入流,用于接住在Service类生成的含有EXCEL的输入流

public String exportNetworkDeviceList() throws Exception {
    setInputStream(networkDeviceService.exportNetworkDeviceList(NET_STATUS, NET_MODEL_NUMBER, NET_BUILDING, NET_FLOOR, NET_LOCATION)); 
        return "getNetworkDeviceExportList";
    }

Service类代码:(生成EXCEL表格代码在Service类写)

public InputStream exportNetworkDeviceList(String netStatus,
            String netModelNumber, String netBuilding, String netFloor,
            String netLocation) {
        HSSFWorkbook wb = new HSSFWorkbook();
        // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet("表一");
        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
        HSSFRow row = sheet.createRow((int) 0);
        // 第四步,创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle style = wb.createCellStyle();
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式

  //写列名,视自己的需求而定
        HSSFCell cell = row.createCell(0);
        cell.setCellValue("设备型号");
        cell.setCellStyle(style);
        cell = row.createCell(1);
        cell.setCellValue("端口数");
        cell.setCellStyle(style);
        cell = row.createCell(2);
        cell.setCellValue("设备名称");
        cell.setCellStyle(style);
        cell = row.createCell(3);
        cell.setCellValue("状态");
        cell.setCellStyle(style);
        cell = row.createCell(4);
        cell.setCellValue("楼宇");
        cell.setCellStyle(style);
        cell = row.createCell(5);
        cell.setCellValue("楼层");
        cell.setCellStyle(style);
        cell = row.createCell(6);
        cell.setCellValue("位置");
        cell.setCellStyle(style);
        cell = row.createCell(7);
        cell.setCellValue("接口");
        cell.setCellStyle(style);
        cell = row.createCell(8);
        cell.setCellValue("IP地址");
        cell.setCellStyle(style);
        cell = row.createCell(9);
        cell.setCellValue("网关");
        cell.setCellStyle(style);
        cell = row.createCell(10);
        cell.setCellValue("备注");
        cell.setCellStyle(style);
        
        //构造数据库查询语句,待会我用与从DAO类取数据,视自己的需求而定,个人建议将这一部分写在另一个方法里面
        String hql = "from NetworkDevice ";
        if (netStatus == null) {

} else {
            if (netStatus.equalsIgnoreCase("00")) {
                hql += "n where n.NET_STATUS!=null ";
            } else {
                hql += "n where n.NET_STATUS='" + netStatus + "' ";
            }
            ;
            if (!netModelNumber.isEmpty()) {
                hql += "AND n.NET_MODEL_NUMBER = '" + netModelNumber + "' ";
            }
            ;
            if (!netBuilding.isEmpty()) {
                hql += "AND n.NET_BUILDING = '" + netBuilding + "' ";
            }
            ;
            if (!netFloor.isEmpty()) {
                hql += "AND n.NET_FLOOR = '" + netFloor + "' ";
            }
            ;
            if (!netLocation.isEmpty()) {
                hql += "AND n.NET_LOCATION = '" + netLocation + "' ";
            }
            ;
        }
        hql += "order by 1 DESC";
        
        // 第五步,写入实体数据 实际应用中这些数据从数据库得到,
        List<NetworkDevice> exportList = networkDeviceDaoImpl.exportNetworkDeviceList(hql);
        for (int i = 0; i < exportList.size(); i++) {
            row = sheet.createRow((int) i + 1);
            NetworkDevice netDevice = exportList.get(i);
            // 第四步,创建单元格,并设置值
            row.createCell(0).setCellValue(netDevice.getNET_MODEL_NUMBER());
            row.createCell(1).setCellValue(netDevice.getNET_DEVICE_PORT());
            row.createCell(2).setCellValue(netDevice.getNET_DEVICE_NAME());
            row.createCell(3).setCellValue(netDevice.getNET_STATUS());
            row.createCell(4).setCellValue(netDevice.getNET_BUILDING());
            row.createCell(5).setCellValue(netDevice.getNET_FLOOR());
            row.createCell(6).setCellValue(netDevice.getNET_LOCATION());
            row.createCell(7).setCellValue(netDevice.getNET_INTERFACE());
            row.createCell(8).setCellValue(netDevice.getNET_IP());
            row.createCell(9).setCellValue(netDevice.getNET_GATEWAY());
            row.createCell(10).setCellValue(netDevice.getNET_REMARK());

}
        //自动设置EXCEL的列宽,视自己的需求而定,也可以用sheet.setDefaultColumnWidth(13);为全部列的列宽设置默认值
        sheet.autoSizeColumn((short)0);
        sheet.autoSizeColumn((short)2);
        sheet.autoSizeColumn((short)6);
        sheet.autoSizeColumn((short)7);
        sheet.autoSizeColumn((short)8);
        sheet.autoSizeColumn((short)9);
        sheet.autoSizeColumn((short)10);

  //设置文件名,用格式化日期来生成一个ID
        String filePath="";
        Date dt = new Date();
        DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
        String date = df.format(dt).toString();
        filePath = "NetDevice" + date + ".xls";
        File file=new File(filePath);
        try{
            OutputStream out=new FileOutputStream(file);
            wb.write(out);
            out.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        InputStream in=null;
        try{
            in=new FileInputStream(file);
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        return in;
    }

strust2代码:

<action name="ExportNetworkDeviceList" class="com.javaweb.action.NetworkDeviceAction"
            method="exportNetworkDeviceList">
            <result name="getNetworkDeviceExportList" type="stream">
                <param name="inputStream">excelStream</param>             
                <param name="ContentType">application/vnd.ms-excel</param>
                <param name="contentDisposition">filename="NetDevice.xls"</param>
            </result>
        </action>

PS:据网友@puyans反馈,若strust2的代码写:<param name="inputStream">excelStream</param> 控制台会报:

Cannot create type class java.io.InputStream from value excelStream - [unknown location]

若出现这种情况,请改为:

<param name="inputStream">inputStream</param>

JAVAWeb SSH框架 利用POI 导出EXCEL,弹出保存框的更多相关文章

  1. Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框(转载)

    https://blog.csdn.net/evangel_z/article/details/7332535

  2. CEfSharp下载文件 弹出保存框,实现 IDownloadHandler 接口

    上节讲了如何将CefSharp集成到C#中,但集成后将web界面链接进ChromiumWebBrowser后,但web界面上下载附件的功能不好使咯. 百度了半天还是没搞定,只能去看官网的Excampl ...

  3. 使用CEfSharp之旅(3)下载文件 弹出保存框 IDownloadHandler

    原文:使用CEfSharp之旅(3)下载文件 弹出保存框 IDownloadHandler 版权声明:本文为博主原创文章,未经博主允许不得转载.可点击关注博主 ,不明白的进群191065815 我的群 ...

  4. struts2中利用POI导出Excel文档并下载

    1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...

  5. 利用poi导出Excel

    import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...

  6. Java Web利用POI导出Excel简单例子

    采用Spring mvc架构: Controller层代码如下 @Controller public class StudentExportController{ @Autowired private ...

  7. 导出excel——弹出框

    表单提交 凡是表单提交(表单提交分3种,见以下的1.2.3)的话.而且设置了表单标签的enctype="multipart/form-data"属性.那么这个时候就会打开弹出框. ...

  8. Spring Boot利用poi导出Excel

    至于poi的用法就不多说了,网上多得很,但是发现spring boot结合poi的就不多了,而且大多也有各种各样的问题. public class ExcelData implements Seria ...

  9. html 移动端关于长按图片弹出保存问题

    在做html5项目的时候有个需求是要拖动一个图片,但是又不要用户长时间按着弹出保存框.首先想到的就是在点图片的时候阻止默认事件的发生: js停止冒泡· function myfn(e){ window ...

随机推荐

  1. JVM调优-工具篇

    原文地址 16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一 ...

  2. hadoop 根据secondary namenode恢复namenode

    refer to http://www.cnblogs.com/Richardzhu/p/3435989.html http://blog.csdn.net/wuzhilon88/article/de ...

  3. 高性能js之数据访问性能

    js中si中基本数据访问: 直接量, 变量, 数组项, 对象成员 性能问题: 首先要理解作用域链的基本概念,例如,当一个函数被创建时,就会产生一个激活对象(AO对象),AO对象中存储了该函数中所有的属 ...

  4. P3214 [HNOI2011]卡农

    题目 P3214 [HNOI2011]卡农 在被一题容斥\(dp\)完虐之后,打算做一做集合容斥这类的题了 第一次深感HNOI的毒瘤(题做得太少了!!) 做法 求\([1,n]\)组成的集合中选\(m ...

  5. Elasticsearch核心知识大纲脑图

  6. 各种IoC框架下实现AOP

    .Net AOP(五) 各种IoC框架下实现AOP 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率 主要功能 日志记录,性 ...

  7. 在cmd中将FAT32转换为NTFS分区的命令是什么?

    将FAT32转换为NTFS分区的命令是什么? ========================================== 在cmd命令行模式下输入: convert x: /fs:ntfs ...

  8. JavaScript秘密

    对象 对象使用和属性 JavaScript 中所有变量都可以当作对象使用,除了两个例外 null 和 undefined. false.toString(); // 'false' [1, 2, 3] ...

  9. cscope usage

    1) Reference: Linux 平台下阅读源码的工具链 程序员的利器 – cscope 2) cscope help: :help cscope :help cscope-suggestion ...

  10. zTree获取(子)节点

    var ids=[]; ids=getChildren(ids, treeNode);//TreeNode是选中节点,ids是子节点id数组,格式:123,223,4,55 1.获取直接子节点的id ...