Java利用POI实现导出excel文件
来源:互联网 发布:java character 编辑:程序博客网 时间:2024/04/27 20:23
项目中要实现导出excel功能,下面是一个公共方法:
环境:JDK1.8,poi-3.14
项目中js请求是ajax请求。
因为response原因,一般请求浏览器是会处理服务器输出的response,例如生成png、文件下载等,然而ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的,说白点就是js无法调用到浏览器的下载处理机制和程序。
本例中我们先将excel文件下载到服务端,然后前台点击导出excel按钮,从服务端下载相应的文件。
下面代码片是DataExportUtil工具类,控制层传入3个参数就可以实现excel导出:
下面是js请求的代码,ajax请求我们是封装了下的:
$('#export-table-excle').on('click',function(){ var tableHeader = "项目名称,项目编号,客户名称,客户联系人,活动名称,活动日期,活动地点,我方参与人员,活动目的,会议纪要,关键问题及困难说明,评分"; var params = { "other": { "isManager": isManager, "shortNo": shortNo, "tableHeader": tableHeader, "sheetName": "客户公关活动汇总" } } demo.ajax.postUrl("/summary/getExcel.serv", params, function (ret) { if (ret != null && ret.code != null && ret.code.code != null && ret.code.code == '0000') { var name = ret.bo; //name是excel的文件名 var url = "127.0.0.1:8080/demo/export/" + name; //在项目webapp下的export文件夹下载文件 window.open("http://" + url); } else { //服务器操作失败,不关闭对话框 } return; } ); });
@RequestMapping(value = "/getExcel.serv", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ServiceData getExcel(HttpServletRequest request, @RequestBody FormData<SummaryListModel> form) throws Exception { //返回统一的服务端数据 ServiceData ret = new ServiceData(); Map<String, Object> map = new HashMap<String, Object>(); //传入url参数 if (form.getOther().containsKey("shortNo") && form.getOther().containsKey("isManager")) { String shortNo = (String)form.getOther().get("shortNo"); String isManager = (String)form.getOther().get("isManager"); //设置查询条件 map.put("shortNo", shortNo); map.put("isManager", isManager); } String tableHeader = (String)form.getOther().get("tableHeader"); String[] titleColumns = tableHeader.trim().split(","); //获取表头 String sheetName = (String)form.getOther().get("sheetName"); //获取表名 List<Object[]> dataList = new ArrayList<Object[]>(); dataList = summaryService.getList(map); //查询数据库中数据,获取数据 String name = DataExportUtil.exportDataToExcel(sheetName, titleColumns, dataList); //调用导出excel工具类 ret.setCode(request, ServiceData.RetCode.Success); ret.setBo(name); return ret; }
如果js使用的不是基于ajax的请求,如果是form表单提交,那么控制层可以写为:
@RequestMapping(value = "/getExcel.serv", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ServiceData getExcel(HttpServletRequest request, HttpServletResponse response, @RequestBody FormData<SummaryListModel> form) throws Exception { //返回统一的服务端数据 ServiceData ret = new ServiceData(); Map<String, Object> map = new HashMap<String, Object>(); //传入url参数 if (form.getOther().containsKey("shortNo") && form.getOther().containsKey("isManager")) { String shortNo = (String)form.getOther().get("shortNo"); String isManager = (String)form.getOther().get("isManager"); //设置查询条件 map.put("shortNo", shortNo); map.put("isManager", isManager); } String tableHeader = (String)form.getOther().get("tableHeader"); String[] titleColumns = tableHeader.trim().split(","); //获取表头 String sheetName = (String)form.getOther().get("sheetName"); //获取表名try{//设置headerresponse.setHeader("Content-Disposition","attachment; filename=\""+new String((sheetName).getBytes("gb2312"),"ISO-8859-1")+".xls\"");OutputStream out = response.getOutputStream();List<Object[]> dataList = new ArrayList<Object[]>();dataList = summaryService.getList(map); //查询数据库中数据,获取数据//此时将工具类中的参数改为4个,exportDataToExcel、writeToFile方法上加上OutputStream out,工具类中的writeToFile方法try中修改为//workbook.write(out); 这一条语句就ok了,浏览器会自动弹出选择文件夹的框String name = DataExportUtil.exportDataToExcel(out,sheetName, titleColumns, dataList); //调用导出excel工具类ret.setCode(request, ServiceData.RetCode.Success);ret.setBo(name);out.close();}catch (IOException e) {e.printStackTrace();} return ret; }
1 0
- Java利用POI实现导出excel文件
- JAVA利用POI导出Excel模板文件
- Java 利用poi 导出Excel
- 利用Java反射机制和POI实现导出Excel功能
- JAVA利用POI实现excel的导入导出
- 利用Java反射机制和POI实现导出Excel功能
- Java利用POI实现数据的Excel导出
- java poi导出excel文件
- Java实现POI导出Excel
- java POI实现excel导出
- 利用POI导入和导出excel文件
- struts2利用poi导出excel文件
- 利用poi 导入导出excel文件
- 文件下载利用poi导出excel
- 利用poi实现table表格导出excel
- 利用POI实现Excel的导入导出
- java利用POI导出EXCEL总结
- java利用poi导出excel报表
- 【设计模式】动态代理模式
- There are no packages available for installation
- C++基础知识
- hdu 3791 poj 1577 二叉搜索树
- Oracle学习笔记安装篇之在Redhat Enterprise Linux 7.0 x86_64下安装Oracle11g R2
- Java利用POI实现导出excel文件
- RHEL7 安装图形化桌面
- 定时器的声明以及判断定时器是否存在
- 安卓OOM和Bitmap图片二级缓存机制(二)
- Netty精粹之轻量级内存池技术实现原理与应用
- 返回指向函数的指针
- RHEL7 配置VNC远程桌面工具
- SpringBoot之Redis篇(Junit)
- Bootstrap——引用小图标