在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. JVM读书笔记之OOM

    在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能,本文总结了若干实例来验证异常及发生的场景. 下文代码的开头都 ...

  2. Django | 页面数据的缓存与使用

    为什么要使用缓存? 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求页面,服务器会重新计算.从开销处理的角度来看,这比你读取一个现成的标准文件的代价要昂贵的多 使用缓存,将多用户访问时基本相同 ...

  3. 【杂谈】Tomcat 之 Lifecycle接口

    前言 此篇随笔记录<How Tomcat works>中关于Lifecycle接口的相关总结 Lifecycle接口的主要目的 核心:统一. 已知Tomcat的卡特琳娜(Catalina) ...

  4. HBase 在人工智能场景的使用

    近几年来,人工智能逐渐火热起来,特别是和大数据一起结合使用.人工智能的主要场景又包括图像能力.语音能力.自然语言处理能力和用户画像能力等等.这些场景我们都需要处理海量的数据,处理完的数据一般都需要存储 ...

  5. [转]Memcache的使用和协议分析详解

    Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力. 它可以应 ...

  6. Tomcat:At least one JAR was scanned for TLDs yet contained no TLDs

    启动Tomcat的时候,经常见到这样的BUG:   14-Apr-2019 13:53:25.198 信息 [localhost-startStop-1] org.apache.jasper.serv ...

  7. js_html_input中autocomplete="off"在chrom中失效的解决办法

    分享网上的2种办法: 1-可以在不需要默认填写的input框中设置 autocomplete="new-password"(已实测,有效) 网上咱没有找到对其详细解释,但是发现16 ...

  8. [转]用C#在windows上操控电脑自带蓝牙(入道指南)

    本文转自:https://blog.csdn.net/YSSJZ960427031/article/details/50990372 前言如题,如果你也想用C#在windows上操控电脑自带蓝牙,但是 ...

  9. session图片验证码,页面和请求是两个地址。android手机好用,iphone 失效。

    问题描述:之前在H5页面用session做了一个验证码.安卓手机好使.但是到苹果就不好使了(页面访问是一个域名地址,ajax请求是用另外的一个ip地址). 详细说明: 验证码请求后台图片正常显示,an ...

  10. Java学习笔记之——继承

    父类(基类):动物 子类:猫.狗.狼.老虎 如果子类继承于父类,则会自动拥有父类的所有非私有属性和方法,不会继承构造方法 父类和子类要满足一种关系:子类是父类的一种 Java中只支持单继承:一个子类只 ...