JAVAWeb SSH框架 利用POI 导出EXCEL,弹出保存框
导入包这一些不多说,直接贴出关键代码,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,弹出保存框的更多相关文章
- Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框(转载)
https://blog.csdn.net/evangel_z/article/details/7332535
- CEfSharp下载文件 弹出保存框,实现 IDownloadHandler 接口
上节讲了如何将CefSharp集成到C#中,但集成后将web界面链接进ChromiumWebBrowser后,但web界面上下载附件的功能不好使咯. 百度了半天还是没搞定,只能去看官网的Excampl ...
- 使用CEfSharp之旅(3)下载文件 弹出保存框 IDownloadHandler
原文:使用CEfSharp之旅(3)下载文件 弹出保存框 IDownloadHandler 版权声明:本文为博主原创文章,未经博主允许不得转载.可点击关注博主 ,不明白的进群191065815 我的群 ...
- struts2中利用POI导出Excel文档并下载
1.项目组负责人让我实现这个接口,因为以前做过类似的,中间并没有遇到什么太困难的事情.其他不说,先上代码: package com.tydic.eshop.action.feedback; impor ...
- 利用poi导出Excel
import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...
- Java Web利用POI导出Excel简单例子
采用Spring mvc架构: Controller层代码如下 @Controller public class StudentExportController{ @Autowired private ...
- 导出excel——弹出框
表单提交 凡是表单提交(表单提交分3种,见以下的1.2.3)的话.而且设置了表单标签的enctype="multipart/form-data"属性.那么这个时候就会打开弹出框. ...
- Spring Boot利用poi导出Excel
至于poi的用法就不多说了,网上多得很,但是发现spring boot结合poi的就不多了,而且大多也有各种各样的问题. public class ExcelData implements Seria ...
- html 移动端关于长按图片弹出保存问题
在做html5项目的时候有个需求是要拖动一个图片,但是又不要用户长时间按着弹出保存框.首先想到的就是在点图片的时候阻止默认事件的发生: js停止冒泡· function myfn(e){ window ...
随机推荐
- 目标检测--之RCNN
目标检测--之RCNN 前言,最近接触到的一个项目要用到目标检测,还有我的科研方向caption,都用到这个,最近电脑在windows下下载数据集,估计要一两天,也不能切换到ubuntu下撸代码~.所 ...
- Linux基础系列:常用命令(8)_shell script
一.什么是shell script 将OS命令堆积到可执行的文件里,由上至下的顺序执行文本里的OS命令 就是脚本了. 再加上些智能(条件/流控)控制,就变成了智能化脚本了 二.变量命名规则 以字母或下 ...
- Linux基础系列:常用命令(5)_samba服务与nginx服务
作业一:部署samba 每个用户有自己的目录,可以浏览内容,也可以删除 所有的用户共享一个目录,只能浏览内容,不能删 安装samba服务 1.准备环境 setenforce 0 2.安装软件包 yum ...
- LRC歌词文件读取代码
/**************************************************/ /*******************-main文件-******************* ...
- tomcat异常处理经验汇总
1.Https: Feb 21, 2018 5:22:02 PM org.apache.coyote.AbstractProtocol initSEVERE: Failed to initialize ...
- [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- debian下为stm32f429i-discovery编译uboot
交叉编译器:arm-uclinuxeabi-2010q1 交叉编译器下载下来后解压,然后将其中bin文件夹路径加入到PATH变量中. 先下载uboot和linux源码: git clone https ...
- poj 1032 Parliament 【思维题】
题目地址:http://poj.org/problem?id=1032 Parliament Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- 算法(Algorithms)第4版 练习 1.3.2
was best times of the was the it (1 left on stack)
- SQL truncate 、delete与drop区别及 MSSQL、MySQL 数据库删除大批量千万级百万级数据的优化
C#_Stopwatch 类 http://www.cnblogs.com/zhw511006/archive/2009/07/22/1528405.html http://blog.csdn.net ...