java POI导出Excel文件数据库的数据
在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。这里我简单实现导出Excel文件。
POI jar包下载:http://poi.apache.org/download.html

文章最后面,封装了通用型的poi工具类,直接复制就可使用(任意 List<实体类>,已经判断版本)。

导出文件:

前端ajax异步请求代码:
$("#btn").on("click",function () {
$.ajax("outStu",{
type:"post",
success:function (data) {
if (data==200){
alert("导出成功!");
}else {
alert("导出失败!");
}
}
});
})
后台servlet代码:
/**
* @author hh
*/
@WebServlet("/outStu")
public class StuOutServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//数据库读取学生对象列表
List<Student> list = new StudentDao().listStudent();
//表头
String[] header={"编号","姓名","年龄","性别","电话","籍贯"};
//保存文件位置+文件名(后缀一定.xls)
String url = "/Users/mac/Documents/outStudentData/学生信息.xls";
//调用封装的poi工具类
int code=PoiUtil.OutExcel(list,url,header,"StudenInfo");
//返回响应码(是否成功导出)
resp.getWriter().print(code);
}
}
自己封装简单poi工具类代码(只是导出.xls):
/**
* @author hh
*/
public class PoiUtil {
/**
* 导出Excel
* @param list 学生对象列表
* @param url 保存位置及文件名
* @param headers 表头名称
* @param title 单元表格名称
* @return
*/
public static int OutExcel(List<Student> list,String url,String[] headers,String title){
int code=200;
// 声明一个工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
// 生成一个表格
HSSFSheet sheet = workbook.createSheet(title);
//产生表格标题行
HSSFRow row = sheet.createRow(0);
for (short i = 0; i < headers.length; i++) {
HSSFCell cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
}
//遍历集合数据,产生数据行
for (int i=0;i<list.size();i++) {
row = sheet.createRow(i+1);
//设置行数据
row.createCell(0).setCellValue(list.get(i).getSid());
row.createCell(1).setCellValue(list.get(i).getSname());
row.createCell(2).setCellValue(list.get(i).getSage());
row.createCell(3).setCellValue(list.get(i).getSsex());
row.createCell(4).setCellValue(list.get(i).getTel());
row.createCell(5).setCellValue(list.get(i).getOrigin());
}
//定义文件输出流
OutputStream out = null;
try {
out = new FileOutputStream(url);
//写出HSSFWorkbook对象文件
workbook.write(out);
//刷新缓存
out.flush();
//关闭文件输出流
out.close();
} catch (IOException e) {
code=403;
e.printStackTrace();
}
return code; }
}
利用反射封装的一个通用型poi工具类:
/**
*
* @param list 泛型集合对象
* @param url 保存位置及文件名
* @param headers 所有表头信息
* @param title 单元表格名称
* @return 响应码 200:成功 403:失败
*/
public static int outExcel2(List<?> list,String url,String[] headers,String title){
//判断版本
boolean isExcel2003 = url.toLowerCase().endsWith("xls")?true:false;
// 声明一个工作薄
Workbook workbook = null;
if(isExcel2003){
workbook = new HSSFWorkbook();
}else{
workbook = new XSSFWorkbook();
}
//响应码
int code=200;
//获取一个帮助类
CreationHelper factory = workbook.getCreationHelper();
// 生成一个表格
Sheet sheet = workbook.createSheet(title);
//产生表格标题行
Row row = sheet.createRow(0);
//遍历写入表头信息
for (short i = 0; i < headers.length; i++) {
Cell cell = row.createCell(i);
RichTextString text = factory.createRichTextString(headers[i]);
cell.setCellValue(text);
}
//遍历集合数据,产生数据行
for (int i=0;i<list.size();i++) {
//因为表头占据了一行所以这里i+1
row = sheet.createRow(i+1);
//获取所有字段对象 包括私有
Field[] fields=list.get(i).getClass().getDeclaredFields();
//遍历所有字段对象
for (int j = 0; j < fields.length; j++) {
//定义存放值 的变量
Object value= null;
try {
//打开访问开关
fields[j].setAccessible(true);
//获取字段的值
value = fields[j].get(list.get(i));
} catch (IllegalAccessException e) {
code=403;
e.printStackTrace();
}
//获取的值写入到单元格中(我在这里直接toString了,如果规范一点需要类型判断、转换)
row.createCell(j).setCellValue(value.toString());
} }
//定义文件输出流
OutputStream out = null;
try {
out = new FileOutputStream(url);
//写出HSSFWorkbook对象文件
workbook.write(out);
//刷新缓存
out.flush();
//关闭文件输出流
out.close();
} catch (IOException e) {
code=403;
e.printStackTrace();
}
return code; }
java POI导出Excel文件数据库的数据的更多相关文章
- java poi 导出Excel文件
1,导包 poi-3.9-XXX.JAR 2, 创建一个实体对象 public class Student implements Serializable { /** * */ private st ...
- 重构:以Java POI 导出EXCEL为例
重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...
- JAVA POI导出EXCEL 动态表头、多级表头、动态数据
导出Excel文件是业务中经常遇到的需求,以下是经常遇到的一些问题: 1,导出中文文件名乱码 String filename = "sheet1";response.setChar ...
- Java POI导出Excel不弹框选择下载路径(下载文件不选择下载路径,默认) Chrome
在Chrome浏览器中,Java导出Excel文件时,浏览器弹出提示框,需要选择下载路径 在Chrome中的高级设置中,把“下载前询问每个文件的保存位置”去掉就解决了 DEEPLOVE(LC)
- Java POI 导出EXCEL经典实现 Java导出Excel
转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...
- 重构:以Java POI 导出EXCEL为例2
前言 上一篇博文已经将一些对象抽象成成员变量以及将一些代码块提炼成函数.这一节将会继续重构原有的代码,将一些函数抽象成类,增加成员变量,将传入的参数合成类等等. 上一篇博文地址:http://www. ...
- java 实现导出Excel文件
java 实现导出Excel(java生成 excel 并导出文件) 经常有有一些数据需要导出成 excel 格式 ,所以就需要实现啦 开始: 1.加入jar poi-3.6-20091214. ...
- java导入导出Excel文件
package poi.excel; import java.io.IOException; import java.io.InputStream; import java.io.OutputStre ...
- java - 读取,导出 excel文件数据
首先需下载poi java包,添加至构建路径, 写处理方法: import java.io.FileInputStream;import java.io.FileOutputStream;import ...
随机推荐
- spring-boot(六) 邮件服务
学习文章来自:springboot(十):邮件服务 简单使用 1.pom包配置 pom包里面添加spring-boot-starter-mail包引用 <dependencies> < ...
- 关于kubernetes使用私有仓库一点说明
一.概述 关于kubernetes使用私有docker image registry的一些说明: 1.对于自己构建的项目镜像或一些不想暴露到外网的image需要使用自建的私有仓库,一般有两种选择:d ...
- MySQL中间件之ProxySQL(11):链式规则( flagIN 和 flagOUT )
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.理解链式规则 在mysql_query_rules表中,有两个特殊 ...
- 基于SpringMVC+Spring+MyBatis实现秒杀系统【数据库接口】
前言 该篇教程主要关注MyBatis实现底层的接口,把MyBatis交给Spring来托管.数据库连接池用的c3p0.数据库用的MySQL.主要有2个大类:秒杀商品的查询.秒杀明细的插入. 准备工作 ...
- Ansible基础认识及安装使用详解(week5_day1_part1)--技术流ken
Ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量 ...
- 一张图,让你和面试官聊一个小时的“Java内存模型”
如果面试官问你:你了解 Java 内存模型吗? 你就可以使用这张图,按照这张图中的顺序和面试官开聊,正常情况下,聊一个小时是差不多的,这个时候,对你的处境是非常有益的,因为面试官的时间不多了.
- 南大算法设计与分析课程复习笔记(1) L1 - Model of computation
一.计算模型 1.1 定义: 我们在思考和处理算法的时候是机器无关.实现语言无关的.所有的算法运行在一种“抽象的机器”之上,这就是计算模型. 1.2 种类 图灵机是最有名的计算模型,本课使用更简单更合 ...
- [转]Cordova - 彻底搞定IOS编译!
本文转自:https://www.cnblogs.com/sunylat/p/9946482.html 操作系统:OSX10.14 XCode:10.1 Cordova:8.1.2 假设已经配置好了C ...
- [转][Angularjs]$http.post与$.post
本文转自:https://www.cnblogs.com/wolf-sun/p/6878868.html 摘要 在angularjs发送post请求的时候,确实很困惑,在传递json数据的时候,总会遇 ...
- MyBatis3-配置使用log4j输出日志
配置步骤: 1.POM的依赖引入 <!-- log4j --> <!-- https://mvnrepository.com/artifact/log4j/log4j --> ...