Excel导出在内网系统一般用的很多,一般分为POI和JXL两种,前者支持excel2003(xls)和Excel2007(xlsx),而后者只支持Excel2003(xls),所以我们这里使用POI来做Excel 的导出;我们以导出员工信息的数据为例子:
第一步:
导入POI的jar包
第二步,在前台写一个ecxel导出的按钮,请注意,这个地方不能使用Ajax请求,因为我们接受的是一个OutputStream,我们接收到的数据是直接保存或者打开,所以这个地方不能使用ajax的data来接受返回的数据,我们使用window.open()的方式:
第三步:后台接受请求并做处理
@RequestMapping("exportData") @ResponseBody public void exportData(HttpServletResponse response) throws IOException { //查询所有员工数据 List<Employee> list = service.list(); //设置下载的head信息 String fileName = new String("员工数据.xls".getBytes("utf-8"), "iso8859-1"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); //创建一个excel Workbook wb = new HSSFWorkbook(); //创建一个工作表 Sheet sheet = wb.createSheet("员工数据"); //创建一行 Row row = sheet.createRow(0); //创建这一行的单元格并设置内容 row.createCell(0).setCellValue("编号"); row.createCell(1).setCellValue("姓名"); row.createCell(2).setCellValue("邮箱"); row.createCell(3).setCellValue("年龄"); //创建第二行,并使用循环把每一行的数据设置进去 Row employeeRow = null; for (int i = 0; i < list.size(); i++) { Employee employee = list.get(i); employeeRow = sheet.createRow(i + 1); employeeRow.createCell(0).setCellValue(employee.getId()); employeeRow.createCell(1).setCellValue(employee.getName()); employeeRow.createCell(2).setCellValue(employee.getEmail()); employeeRow.createCell(3).setCellValue(employee.getAge()); } //输出 wb.write(response.getOutputStream()); response.getOutputStream().close(); }
测试结果:
这样就完成了一个最基本的数据导出,需要调整excel样式的可以去官网参考:https://poi.apache.org/