SpringBoot + Poi + ajax 实现导出 excel

当我们有导出 excel 的需求时,相信有不少人第一想到的就是 POI 的插件了,那在这里就做简单的示例。

1、pom.xml 引入依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.0.1</version>
</dependency>

2、编写测试接口

@Override
public void exportUser(HttpServletResponse response) {
    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet sheet = workbook.createSheet("员工信息表");
    //设置文件名称
    String fileName = "员工信息" + LocalDate.now() + ".xls";
    //设置表头
    String[] headerList = {"序号", "编号", "姓名", "状态"};
    HSSFRow headerRow = sheet.createRow(0);
    for (int i = 0; i < headerList.length; i++) {
        HSSFCell cell = headerRow.createCell(i);
        HSSFRichTextString text = new HSSFRichTextString(headerList[i]);
        cell.setCellValue(text);
    //设置数据行,存放数据到表中
    int rowColumn = 1;
    List<User> userList = userDao.selectList(new EntityWrapper<User>());
    for(User user : userList) {
        HSSFRow dataRow = sheet.createRow(rowColumn);
        dataRow.createCell(0).setCellValue(development.getId());
        dataRow.createCell(1).setCellValue(development.getNumber());
        dataRow.createCell(2).setCellValue(development.getName());
        dataRow.createCell(3).setCellValue(development.getStatus());
        rowColumn++;
    //设置流格式
    response.setCharacterEncoding("UTF-8");
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-disposition", "attachment;filename=" + fileName);
    response.flushBuffer();
    workbook.write(response.getOutputStream());
    workbook.close();

3、ajax 获取流文件实现导出

$.ajax({
    type: "POST",
    data: JSON.stringify(searchData),
    contentType: 'application/json',
    //设置响应类型
    xhrFields: {responseType: "blob"},
    url: "/test/lin/exportUser",
    success: function (result) {
        const link = document.createElement('a');
        let blob = new Blob([result], {type: 'application/vnd.ms-excel'});
        link.style.display = 'none';
        link.href = URL.createObjectURL(blob);
        link.setAttribute('download', "员工信息表.xls");
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link)

最终导出结果如下: