前言:本文使用后台处理的办法导出前端表格中显示的数据。
引入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
书写PoiUtils
public class PoiUtils { public static ResponseEntity<byte[]> exportExcel(List<Market> marketList) throws IOException { HttpHeaders headers=null; //创建文档 HSSFWorkbook workbook = new HSSFWorkbook(); //创建excel文档 HSSFSheet sheet = workbook.createSheet("市场表"); //定义列的宽度 sheet.setColumnWidth(0, 5 * 256); sheet.setColumnWidth(1, 10 * 256); sheet.setColumnWidth(2, 10 * 256); sheet.setColumnWidth(3, 10 * 256); sheet.setColumnWidth(4, 10 * 256); //设置表头 HSSFRow headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("编号"); headerRow.createCell(1).setCellValue("主题"); headerRow.createCell(2).setCellValue("预算"); headerRow.createCell(3).setCellValue("线索"); for (int i=0;i<marketList.size();i++){ HSSFRow row = sheet.createRow(i+1); Market market = marketList.get(i); row.createCell(0).setCellValue(market.getId()); row.createCell(1).setCellValue(market.getTheme()); row.createCell(2).setCellValue(market.getbudget()); row.createCell(3).setCellValue(market.getClue()); } //将excel写入到ByteArrayOutStream中 ByteArrayOutputStream bos = new ByteArrayOutputStream(); workbook.write(bos); headers=new HttpHeaders(); headers.setContentDispositionFormData("attachment", new String("员工表.xls".getBytes("utf-8"),"iso-8859-1")); //创建ResponseEntity实体并返回 return new ResponseEntity<byte[]>(bos.toByteArray(), headers, HttpStatus.CREATED); } }
显示效果
到浏览器中测试:localhost:80/exportExcel(这是我测试的url,你们的自己根据实际情况来使用)
问题:这个请求只能在浏览器中使用,但在实际的项目中使用是时候该如何使用呢?
有朋友就会说这个很简单呀,直接使用ajax请求该路径不久完事了吗?哈哈哈,此时高手就会想到,ajax请求返回的是json,不是文件流,所以不能使用ajax来进行请求。
这个时候我们可以使用原始表单来解决,具体实现方法如下:
<a href="javascript:void(0)" onclick="exportExcel()">导出1</a> // 导出,使用这种方式 可以,使用 ajax请求不可以 导出excel function exportExcel(){ var form = $("<form>"); form.attr(\'style\', \'display:none\'); form.attr(\'target\', \'\'); form.attr(\'method\', \'post\'); form.attr(\'action\', \'${pageContext.request.contextPath}/user/export\'); var input1 = $(\'<input>\'); input1.attr(\'type\', \'hidden\'); input1.attr(\'name\', \'item\'); input1.attr(\'value\', \'test\'); /* JSON.stringify($.serializeObject($(\'#searchForm\'))) */ $(\'body\').append(form); form.append(input1); form.submit(); form.remove(); }
标记处改成自己项目的请求地址即可!参考博客:https://www.cnblogs.com/xbq8080/p/7344258.html