在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文件数据库的数据的更多相关文章

  1. java poi 导出Excel文件

    1,导包  poi-3.9-XXX.JAR 2, 创建一个实体对象 public class Student implements Serializable { /** * */ private st ...

  2. 重构:以Java POI 导出EXCEL为例

    重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...

  3. JAVA POI导出EXCEL 动态表头、多级表头、动态数据

    导出Excel文件是业务中经常遇到的需求,以下是经常遇到的一些问题: 1,导出中文文件名乱码 String filename = "sheet1";response.setChar ...

  4. Java POI导出Excel不弹框选择下载路径(下载文件不选择下载路径,默认) Chrome

    在Chrome浏览器中,Java导出Excel文件时,浏览器弹出提示框,需要选择下载路径 在Chrome中的高级设置中,把“下载前询问每个文件的保存位置”去掉就解决了 DEEPLOVE(LC)

  5. Java POI 导出EXCEL经典实现 Java导出Excel

    转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...

  6. 重构:以Java POI 导出EXCEL为例2

    前言 上一篇博文已经将一些对象抽象成成员变量以及将一些代码块提炼成函数.这一节将会继续重构原有的代码,将一些函数抽象成类,增加成员变量,将传入的参数合成类等等. 上一篇博文地址:http://www. ...

  7. java 实现导出Excel文件

    java 实现导出Excel(java生成 excel 并导出文件) 经常有有一些数据需要导出成   excel  格式 ,所以就需要实现啦 开始: 1.加入jar poi-3.6-20091214. ...

  8. java导入导出Excel文件

    package poi.excel; import java.io.IOException; import java.io.InputStream; import java.io.OutputStre ...

  9. java - 读取,导出 excel文件数据

    首先需下载poi java包,添加至构建路径, 写处理方法: import java.io.FileInputStream;import java.io.FileOutputStream;import ...

随机推荐

  1. ZOJ Problem Set - 3706

    #include <cstdio> #include <cstdlib> #include <cstring> #include <set> #incl ...

  2. 【EF6学习笔记】(十一)实施继承

    上篇链接:EF学习笔记(十) 处理并发 本篇原文链接:Implementing Inheritance 面向对象的世界里,继承可以很好的重用代码.在本章就对Instructor和Student两个类进 ...

  3. SQL语句方法语法总结(一)

    1.distinct:返回不重复.唯一的值. select distinct col_name from tbl_name --表中的col_name 列的值 如果有10条一样的,仅返回一条. 2.w ...

  4. Hadoop YARN架构设计要点

    YARN是开源项目Hadoop的一个资源管理系统,最初设计是为了解决Hadoop中MapReduce计算框架中的资源管理问题,但是现在它已经是一个更加通用的资源管理系统,可以把MapReduce计算框 ...

  5. Dubbo 入门之二 ——- 项目结构解析

    本文主要说明点 概述 背景 需求 架构 Dubbo源代码项目结构 概述 分享 Dubbo 的项目结构 ,通过本文可以大致了解到Dubbo整个项目的结构 背景 将一个项目进行拆分, 进行分布式架构. 需 ...

  6. MySQL中间件之ProxySQL(5):线程、线程池、连接池

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL的线程 ProxySQL由多个模块组成,是一个多线 ...

  7. 伪指令 ADR 与 LDR 的区别

    指令简介: adr r0, _start 得到的是 _start 的当前执行位置,由 pc+offset 决定 ldr r0, =_start 得到的是绝对的地址,链接时决定 程序示例: ldr r0 ...

  8. .net Core使用Orcle官方驱动连接数据库

    最近在研究.net Core,因为公司的项目用到的都是Oracle数据库,所以简单试一下.net Core怎样连接Oracle. Oracle官方现在已经提供.net Core的官方驱动(预览版),也 ...

  9. 如何用STAR法则来回答「宝洁八大问」

    掌握宝洁八大问,其实就是掌握了半个求职季 每年高峰期,很多同学会问到关于宝洁八大的问题,如何准备.怎么讲故事.如何体现自己的特点等等.针对同学们的提问,分享一篇关于如何回答好宝洁八大问的文章,希望能够 ...

  10. Python3 系列之 面向对象篇

    面向对象的三大特性:继承.封装和多态 Python 做到胶水语言,当然也支持面向对象的编程模式. 封装 class UserInfo(object): lv = 5 def __init__(self ...