在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. java设计模式之——工厂模式

    对于java的设计模式,我还是第一次认认真真的总结,以前用的时候都不曾留意细节,现在回头再看只知道该怎么设计,却忘记当时为嘛要用它了, 所以这次就做一个demo来再次复习总结一下,希望从中能学到新体悟 ...

  2. Win32编程之静态库编写与使用.动态链接库的编写与使用

    Win32编程之静态库编写与使用.动态链接库的编写与使用 一丶什么是静态库.什么是动态链接库. 静态库其实就是解决模块开发的一种解决方案.在以前.我们写代码的时候.每个人都可以独立写一个项目.但是现在 ...

  3. Ansible批量更新远程主机用户密码 (包括Ansible批量做ssh互信)

    按照集团运维信息安全制度, 需要每个一段时间对线上服务器密码进行一次变更,通过shell脚本部署比较繁琐,所以决定采用ansible脚本对远程主机root密码进行批量重置,该脚本已经在稳定运行在正式环 ...

  4. OSI七层协议模型、TCP/IP四层模型和五层协议体系结构之间的关系

    一.OSI七层模型 OSI七层协议模型主要是:应用层(Application).表示层(Presentation).会话层(Session).传输层(Transport).网络层(Network).数 ...

  5. Java BIO、NIO、AIO

    同步与异步 同步与异步的概念, 关注的是 消息通信机制 同步是指发出一个请求, 在没有得到结果之前该请求就不返回结果, 请求返回时, 也就得到结果了. 比如洗衣服, 把衣服放在洗衣机里, 没有洗好之前 ...

  6. Apache-httpd.conf详解

    ## Apache服务器主配置文件.  包括服务器指令的目录设置.# 详见 <URL:http://www.apache.org/docs/> ## 请在理解用途的基础上阅读各指令.## ...

  7. input的三个属性autocomplete、autocapitalize和autocorrect

    下面的input的三个属性是H5新增的属性 <input type="text" class="input-search" placeholder=&qu ...

  8. 浅析JavaScript之数组

    一  概述 JavaScript数组同后端语言一样,具有它自己的数据结构,归根结底,这种数据结构,本质就是一种集合. 在后端语言中(如java,.net等),数组是这样定义的:数组是用来存储相同数据类 ...

  9. datatables 配套bootstrap3样式使用小结(1)

    今天介绍汇总一下datatables. 网址: www.datatables.net 公司CMS内容资讯站的后台管理界面用了大量的table来管理数据,试用了之后,感觉挺不错,推荐一下. 先上一个基本 ...

  10. NET Core微服务之路:弹性和瞬态故障处理库Polly的介绍

    前言 上一节中我们介绍了Ocelot的常见使用配置,通过json配置文件,实现API网关的请求处理.和一个使用DownStream扩展下游中间件,来实现Http转RPC的简单实现,功能不算强大,但可以 ...