在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. [NewLife.XCode]增量累加

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...

  2. Oracle 理论到实践之碎碎念

    有关 Oracle 的著名谣传 1.如果你想把表中数据复制到另一张表,或者想根据现有表创建一个类似的新表,网上有大量不明所以的帖子告诉你实现该功能的语法是select field1,field2 in ...

  3. linux 命令 — cut

    cut 以列的方式格式化输出 依赖定界符 cut -f field_list filename 以默认定界符(tab,制表符)分割文件的列,输出指定的列field_list,field_list由列号 ...

  4. Java 容器源码分析之 Map

    ava.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 List 和 Map.List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建 ...

  5. MySQL EXPLAIN 命令: 查看查询执行计划

    MySQL 的 EXPLAIN 命令可以查看SELECT语句的执行的计划,是 MySQL 查询优化的必备工具. 通过执行计划可以了解查询方式.索引使用情况.需要扫描的数据量以及是否需要临时表或排序操作 ...

  6. python的partial()用法说明

    在functools模块中有一个工具partial(),可以用来"冻结"一个函数的参数,并返回"冻结"参数后的新函数. 很简单的解释,也是官方手册给的示例.对于 ...

  7. DNS域名解析之搭建公司内部域--技术流ken

    什么是DNS DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换 ...

  8. linux的文档和目录结构

    在Linux底下,所有的文件与目录都是由根目录开始,是目录与文件的源头,然后一个个的分支下来,如同树枝状,因此称为这种目录配置为:目录树. 目录树的特点是什么呢? 目录树的起始点是根目录(/,root ...

  9. [转]bitcoin: 通过 rpc 请求节点数据

    本文转自:https://laravel-china.org/index.php/articles/8919/bitcoin-requests-node-data-through-rpc 文章来自本人 ...

  10. 【转载】网站遭遇DDoS攻击怎么办

    在网站运维过程中,有些人的网站遭遇过DDoS攻击,DDos攻击又叫做分布式拒绝服务攻击.DDos攻击将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力 ...