文件下载的工作原理还是依靠了HTTP协议提供了文件下载功能。

   SpringBoot集成POI,导出excel文件非常方便。首先引入所需要的poi  jar包,然后在Controller层实现相关的业务代码即可。话不多说,直接上代码吧。

1.配置pom.xml

<!-- poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

 

2.在controller层添加如下代码:

import org.apache.poi.hssf.usermodel.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;



/**
     * Excel表格导出接口
     * http://localhost:8080/ExcelDownload
     * @param response response对象
     * @throws IOException 抛IO异常
     */
    @RequestMapping("/ExcelDownload")
    public void excelDownload(HttpServletResponse response) throws IOException {
        //表头数据
        String[] header = {"姓名", "工号", "性别", "出生日期", "身份证号码", "婚姻状况","民族","籍贯","政治面貌","电子邮件","电话号码","联系地址","所属部门","职位","职称","聘用形式","入职日期","转正日期","合同起始日期","合同截止日期","合同期限","最高学历"};

        //声明一个工作簿
        HSSFWorkbook workbook = new HSSFWorkbook();

        //生成一个表格,设置表格名称为"学生表"
        HSSFSheet sheet = workbook.createSheet("员工表");

        //设置表格列宽度为10个字节
        sheet.setDefaultColumnWidth(10);
        //创建标题的显示样式
        HSSFCellStyle headerStyle = workbook.createCellStyle();
        headerStyle.setFillForegroundColor(IndexedColors.YELLOW.index);
        headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        //创建第一行表头
        HSSFRow headrow = sheet.createRow(0);

        //遍历添加表头(下面模拟遍历学生,也是同样的操作过程)
        for (int i = 0; i < header.length; i++) {
            //创建一个单元格
            HSSFCell cell = headrow.createCell(i);

            //创建一个内容对象
            HSSFRichTextString text = new HSSFRichTextString(header[i]);

            //将内容对象的文字内容写入到单元格中
            cell.setCellValue(text);
            cell.setCellStyle(headerStyle);
        }

        //获取所有的employee
        List<Employee> emps=employeeService.getAllEmpNonLimit();
        for(int i=0;i<emps.size();i++){
            //创建一行
            HSSFRow row1 = sheet.createRow(i+1);
            //第一列创建并赋值
            row1.createCell(1).setCellValue(new HSSFRichTextString(emps.get(i).getId().toString()));
            //第二列创建并赋值
            row1.createCell(0).setCellValue(new HSSFRichTextString(emps.get(i).getName()));
            //第三列创建并赋值
            row1.createCell(2).setCellValue(new HSSFRichTextString(emps.get(i).getGender()));
            //第4列创建并赋值
            if(emps.get(i).getBirthday() != null){
                row1.createCell(3).setCellValue(new HSSFRichTextString(dateFormat.format(emps.get(i).getBirthday())));
            }
            //第5列创建并赋值
            row1.createCell(4).setCellValue(new HSSFRichTextString(emps.get(i).getIdCard()));
            //第6列创建并赋值
            row1.createCell(5).setCellValue(new HSSFRichTextString(emps.get(i).getWedlock()));
            //第7列创建并赋值
            System.err.println(emps.get(i).getNationName());
            row1.createCell(6).setCellValue(new HSSFRichTextString(emps.get(i).getNationName()));
            //籍贯
            row1.createCell(7).setCellValue(new HSSFRichTextString(emps.get(i).getNativePlace()));
            //第8列创建并赋值
            row1.createCell(8).setCellValue(new HSSFRichTextString(emps.get(i).getPoliticName()));
            //第9列创建并赋值
            row1.createCell(9).setCellValue(new HSSFRichTextString(emps.get(i).getEmail()));
            //第10列创建并赋值
            row1.createCell(10).setCellValue(new HSSFRichTextString(emps.get(i).getPhone()));
            //第11列创建并赋值
            row1.createCell(11).setCellValue(new HSSFRichTextString(emps.get(i).getAddress()));
            //第12列创建并赋值
            row1.createCell(12).setCellValue(new HSSFRichTextString(emps.get(i).getDepartmentName()));
            //第13列创建并赋值
            row1.createCell(13).setCellValue(new HSSFRichTextString(emps.get(i).getPosName()));
            //第14列创建并赋值
            row1.createCell(14).setCellValue(new HSSFRichTextString(emps.get(i).getJobLevelName()));
            //第15列创建并赋值
            if(emps.get(i).getEngageForm() != null){
                row1.createCell(15).setCellValue(new HSSFRichTextString(emps.get(i).getEngageForm()));
            }
            //第16列创建并赋值-入职日期
            if(emps.get(i).getBeginDate()!= null){
                row1.createCell(16).setCellValue(new HSSFRichTextString(dateFormat.format(emps.get(i).getBeginDate())));
            }
            //转正日期
            if(emps.get(i).getConversionTime() != null){
                row1.createCell(17).setCellValue(new HSSFRichTextString(dateFormat.format(emps.get(i).getConversionTime())));
            }
            //合同起始日期
            if(emps.get(i).getBeginContract() != null){
                row1.createCell(18).setCellValue(new HSSFRichTextString(dateFormat.format(emps.get(i).getBeginContract())));
            }
            //合同截止日期
            if(emps.get(i).getEndContract() != null){
                row1.createCell(19).setCellValue(new HSSFRichTextString(dateFormat.format(emps.get(i).getEndContract())));
            }
            //第20列创建并赋值-合同期限
            if(emps.get(i).getContractTerm() != null){
                row1.createCell(20).setCellValue(new HSSFRichTextString(emps.get(i).getContractTerm().toString()));
            }
            //第21列创建并赋值-最高学历
            if( emps.get(i).getTiptopDegree() != null){
                row1.createCell(21).setCellValue(new HSSFRichTextString(emps.get(i).getTiptopDegree()));
            }
        }


        //准备将Excel的输出流通过response输出到页面下载
        //八进制输出流
        response.setContentType("application/octet-stream");

        //这后面可以设置导出Excel的名称,此例中名为student.xls
        response.setHeader("Content-disposition", "attachment;filename=employee.xls");

        //刷新缓冲
        response.flushBuffer();

        //workbook将Excel写入到response的输出流中,供页面下载
        workbook.write(response.getOutputStream());
    }

3.前台页面直接访问 http://xxxx/ExcelDownload  即可自动下载定义的excel

4.实现效果图:

spring boot 引入jar包 springboot引入poi_java