springMVC中使用POI方式导出excel至客户端、服务器实例
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
这里的方法支持导出excel至项目所在服务器,或导出至客户端浏览器供用户下载,下面我把两个实例都放出来。
1.下载所需POI的jar包,并导入项目。
2.添加一个User类,用于存放用户实体,类中内容如下:
package com.mvc.po;
public class User {
private int id;
private String name;
private String password;
private int age;
public User() {
}
public User(int id, String name, String password, int age) {
this.id = id;
this.name = name;
this.password = password;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3.添加一个UserController类,类中内容如下:
package com.mvc.controller; import java.text.SimpleDateFormat;
import java.util.Date; import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import com.mvc.po.User;
import com.mvc.service.UserService; @Controller
public class UserController { @Autowired
private UserService userService; @RequestMapping("/export.do")
public @ResponseBody String export(HttpServletResponse response){
response.setContentType("application/binary;charset=UTF-8");
try{
ServletOutputStream out=response.getOutputStream();
String fileName=new String(("UserInfo "+ new SimpleDateFormat("yyyy-MM-dd").format(new Date())).getBytes(),"UTF-8");
response.setHeader("Content-disposition", "attachment; filename=" + fileName + ".xls");
String[] titles = { "用户编号", "用户姓名", "用户密码", "用户年龄" };
userService.export(titles, out);
return "success";
} catch(Exception e){
e.printStackTrace();
return "导出信息失败";
}
}
}
4.添加一个接口类UserService和实现类UserServiceImpl,类中内容如下:
package com.mvc.service; import javax.servlet.ServletOutputStream;
import com.mvc.po.User; public interface UserService {
public void export(String[] titles, ServletOutputStream out);
}
package com.mvc.service.impl; import java.text.SimpleDateFormat;
import java.util.List; import javax.servlet.ServletOutputStream; import com.mvc.dao.UserDAO;
import com.mvc.po.User;
import com.mvc.service.UserService; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class UserServiceImpl implements UserService { @Autowired
private UserDAO userDAO; @Override
public void export(String[] titles, ServletOutputStream out) {
try{
// 第一步,创建一个workbook,对应一个Excel文件
HSSFWorkbook workbook = new HSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet hssfSheet = workbook.createSheet("sheet1");
// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
HSSFRow hssfRow = hssfSheet.createRow(0);
// 第四步,创建单元格,并设置值表头 设置表头居中
HSSFCellStyle hssfCellStyle = workbook.createCellStyle();
//居中样式
hssfCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); HSSFCell hssfCell = null;
for (int i = 0; i < titles.length; i++) {
hssfCell = hssfRow.createCell(i);//列索引从0开始
hssfCell.setCellValue(titles[i]);//列名1
hssfCell.setCellStyle(hssfCellStyle);//列居中显示
} // 第五步,写入实体数据
List<User> users = userDAO.query(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
if(users != null && !users.isEmpty()){
for (int i = 0; i < users.size(); i++) {
hssfRow = hssfSheet.createRow(i+1);
User user = users.get(i); // 第六步,创建单元格,并设置值
int userid = 0;
if(user.getId() != 0){
userid = user.getId();
}
hssfRow.createCell(0).setCellValue(userid);
String username = "";
if(user.getName() != null){
username = user.getName();
}
hssfRow.createCell(1).setCellValue(username);
String password = "";
if(user.getPassword() != null){
password = user.getPassword();
}
hssfRow.createCell(2).setCellValue(password);
int age = 0;
if(user.getAge() != 0){
age = user.getAge();
}
hssfRow.createCell(3).setCellValue(age);
}
} // 第七步,将文件输出到客户端浏览器
try {
workbook.write(out);
out.flush();
out.close(); } catch (Exception e) {
e.printStackTrace();
}
}catch(Exception e){
e.printStackTrace();
throw new Exception("导出信息失败!");
}
}
}
5.添加一个接口类UserDAO和实现类UserDAOImpl,类中内容如下:
package com.mvc.dao; import java.util.List;
import com.mvc.po.User; public interface UserDAO {
List<User> query();
}
package com.mvc.dao.impl; import java.util.List;
import java.sql.ResultSet;
import java.sql.SQLException; import com.mvc.dao.UserDAO;
import com.mvc.po.User; import org.springframework.stereotype.Repository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; @Repository
public class UserDAOImpl implements UserDAO { @Autowired
private JdbcTemplate jdbcTemplate; public List<User> query() {
return this.jdbcTemplate.query("select * from student",
new RowMapper<User>() {
public User mapRow(ResultSet rs, int arg1)
throws SQLException {
return new User(rs.getInt("sId"),
rs.getString("sName"), rs.getString("sPwd"), rs
.getInt("sAge"));
}
});
}
}
这样就完成了excel导出至客户端浏览器,当然有时候也会用到导出excel至服务器上。只需要对本文步骤4中的第七步文件输出方式进行修改,如下:
// 第七步,将文件存到指定位置
try {
FileOutputStream fileOutputStream = new FileOutputStream("C:/user.xls");//指定路径与名字和格式
workbook.write(fileOutputStream);//将数据写出去
fileOutputStream.close();//关闭输出流
} catch (Exception e) {
e.printStackTrace();
}
然后去除controller类中的out参数设置就ok了。也可以看出其实两种方式只是最终保存方式不同,其他步骤是共通的。
2017-9-8 更新:HSSF、XSSF和SXSSF区别以及Excel导出优化
springMVC中使用POI方式导出excel至客户端、服务器实例的更多相关文章
- java中使用poi导入导出excel文件_并自定义日期格式
Apache POI项目的使命是创造和保持java API操纵各种文件格式基于Office Open XML标准(OOXML)和微软的OLE复合文档格式(OLE2)2.总之,你可以读写Excel文件使 ...
- Java利用POI导入导出Excel中的数据
首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...
- POI导入导出Excel(HSSF格式,User Model方式)
1.POI说明 Apache POI是Apache软件基金会的开源代码库, POI提供对Microsoft Office格式档案读和写的功能. POI支持的格式: HSSF - 提供读写Microso ...
- SpringMvc 使用poi导入导出Excel
Util类 package com.common.util; public class ExportUtil { private XSSFWorkbook wb = null; private XSS ...
- (ssh整合web导出excel)在ssh框架中使用poi正确导出具有比较高级固定格式的excel 整体过程,查询导出前后台下载
(一) 接需求 : 需求相关 (贴图 ) 生成三核对文件 1.新增三核对菜单页面中,增加生成三核对文件功能按钮,弹窗可根据变电站.电压等级查询定值单. 2.定值单信息以表格形式展示,根据选择 ...
- springMVC框架+POI组件导出Excel
目的:访问url(http://localhost:8080/POIOutputExcel/outputexcel.do)实现excel导出,效果图如下: 文件目录(配置文件就不多说了,跟前面的随笔一 ...
- POI通用导出Excel数据(包括样式设计)
前言 前一段时间我写过通用的导入Excel,前几天也写了导出pdf格式的,还有我之前搞得导出Word,我在之前的博客也都介绍了导出和导入是一个道理,无非是一个获取一个是赋值.昨天有一位同仁看了我的Ex ...
- POI导入导出excel(附工具类)
关于POI导出excel的功能我在前面的文章已经写过了,POI导出excel的三种方式 , 导出表格数据到excel并下载(HSSFWorkbook版) ,本篇文章主要是将导入导出功能进一步地封装,在 ...
- java使用poi生成导出Excel(新)
导出样式: java代码: import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStre ...
随机推荐
- Python进阶内容(三)--- reduce
描述 functools.reduce() 函数会对参数序列中元素进行累积.函数将一个数据集合(列表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集 ...
- 看JQ时代过来的前端,如何转换思路用Vue打造选项卡组件
前言 在Vue还未流行的时候,我们都是用JQuery来封装一个选项卡插件,如今Vue当道,让我们一起来看看从JQ时代过来的前端是如何转换思路,用数据驱动DOM的思想打造一个Vue选项卡组件. 接下来, ...
- WEB相关系列
一.Nginx(web服务器) Nginx概述和安装(1) Nginx配置文件(2) Nginx日常维护操作(3) Nginx常用配置实例(4) Nginx常用功能(5) Nginx性能优化技巧(6) ...
- 【Java学习笔记之八】JavaBean中布尔类型使用注意事项
JavaBean是一个标准,遵循标准的Bean是一个带有属性和getters/setters方法的Java类. JavaBean的定义很简单,但是还有有一些地方需要注意,例如Bean中含有boolea ...
- Codeforces Round #408 (Div. 2)(A.水,B,模拟)
A. Buying A House time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...
- POI实现大数据EXCLE导入导出,解决内存溢出问题
使用POI能够导出大数据保证内存不溢出的一个重要原因是SXSSFWorkbook生成的EXCEL为2007版本,修改EXCEL2007文件后缀为ZIP打开可以看到,每一个Sheet都是一个xml文件, ...
- Qt 共享库(动态链接库)和静态链接库的创建及调用
前言: 编译器 Qt Creator, 系统环境 win7 64 位 1.创建共享库: 新建文件或项目->选择 Library 和 c++ 库->选择共享库->下一步(工程名为 sh ...
- Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目
前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+jenkins的持续集成环境,并构建了基于maven的项目.这一节,我们继续扩展功能,增加对Nodejs ...
- Mac 终端 shell 公钥失效解决办法
mac的终端下面使用ssh user@localhost输入密码不能正常登录解决 今天回来后发现系统突然很奇怪,以前在mac的终端下面使用ssh user@localhost输入密码就可以连接到远 ...
- 从零开始学习前端JAVASCRIPT — 4、JavaScript基础Math和Date对象的介绍
Math对象的介绍 1:Math对象 Math 对象用于执行数学任务.并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math().您无需创建它,通过把 Math 作为对象使用就 ...