使用Java將表格數據導出成Excel格式


前言:本文使用后台處理的辦法導出前端表格中顯示的數據。

引入依賴

        <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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM