Java利用POI实现导出excel文件
2017-03-03 16:53
295 查看
项目中要实现导出excel功能,下面是一个公共方法:
环境:JDK1.8,poi-3.14
项目中js请求是ajax请求。
因为response原因,一般请求浏览器是会处理服务器输出的response,例如生成png、文件下载等,然而ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的,说白点就是js无法调用到浏览器的下载处理机制和程序。
本例中我们先将excel文件下载到服务端,然后前台点击导出excel按钮,从服务端下载相应的文件。
下面代码片是DataExportUtil工具类,控制层传入3个参数就可以实现excel导出:
下面是js请求的代码,ajax请求我们是封装了下的:
下面是控制层代码:
如果js使用的不是基于ajax的请求,如果是form表单提交,那么控制层可以写为:
环境:JDK1.8,poi-3.14
项目中js请求是ajax请求。
因为response原因,一般请求浏览器是会处理服务器输出的response,例如生成png、文件下载等,然而ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的,说白点就是js无法调用到浏览器的下载处理机制和程序。
本例中我们先将excel文件下载到服务端,然后前台点击导出excel按钮,从服务端下载相应的文件。
下面代码片是DataExportUtil工具类,控制层传入3个参数就可以实现excel导出:
import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.util.CellRangeAddress; import org.springframework.web.context.ContextLoader; /** * 导出excel工具类 * 导出的excel是存在于项目的src/main/webapp/export目录下,如修改,请在84行设置 * @author * */ public class DataExportUtil { /** * 导出excle * @param sheetName 表名 * @param titleColumns 表头 * @param list 要导出的数据 * @throws IOException */ public static String exportDataToExcel(String sheetName, String[] titleColumns, List
下面是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{ //设置header response.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; }
相关文章推荐
- JavaWeb 利用POI实现前端数据到Excel导出
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- java利用POI实现Excel导入导出详解-支持97-2013版本以及2017版本
- Java利用POI实现导入导出Excel表格示例代码
- java利用POI导出Excel功能实现
- Java程序员从笨鸟到菜鸟之(一百零四)java操作office和pdf文件(二)利用POI实现数据导出excel报表
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- java使用POI操作excel文件,实现批量导出,和导入
- java操作Excel之POI(4)利用POI实现数据的批量导出
- JAVA利用POI实现excel的导入导出
- java操作Excel之POI(5)利用POI实现使用模板批量导出数据
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- Java使用POI实现数据导出excel报表
- 【JAVA】POI导出EXCEL经典实现
- java利用POI导出EXCEL总结
- Java POI导出EXCEL经典实现
- Java Struts2 POI创建Excel文件并实现文件下载
- Java 实现导出excel表 POI
- java POI实现excel实现表格导出
- 利用poi实现页面上excel的导入和导出(不刷新页面)之导入