前言:本文使用后台處理的辦法導出前端表格中顯示的數據。
引入依賴
<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