java POI导出Excel文件数据库的数据
程序员文章站
2022-07-02 14:00:39
在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。这里我简单实现导出Excel文件。 POI jar包下载:http://poi.apache.org/download.html 文章最后面,封装了通 ......
在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工具类代码:
/** * @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){ 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++) { //因为表头占据了一行所以这里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; }