easypoi+SpringBoot导出Excel文件

文章目录

    • 引入依赖
    • 注解实体类
    • ExcelUtils
    • 导出Excel

导出Excel文件是Web系统中极为常见的一个操作,今天我们来学习使用easypoi+SpringBoot来实现Excel文件的导出功能。

引入依赖

该项目既然是结合SpringBoot来进行开发的,那么我们直接导出easypoi的SpringBoot的启动器依赖,至于SpringBoot的其他依赖,可以参考我以前的SpringBoot项目依赖。

  • SpringBoot+MyBatisPlus

<dependency>
    <groupId>cn.afterturngroupId>
    <artifactId>easypoi-spring-boot-starterartifactId>
    <version>3.3.0version>
dependency>

注解实体类

我们可以使用@Excel注解来标注实体类属性,同时配置实体类属性的导出参数。

@Data
@TableName("user")
public class User implements Serializable {
    @TableId(type = IdType.AUTO)
    @Excel(name = "ID", orderNum = "0", width = 15)
    private Integer id;
    @Excel(name = "用户名", orderNum = "1", width = 15)
    private String username;
    @Excel(name = "姓名", orderNum = "2", width = 15)
    private String name;
	@Excel(name = "性别", orderNum = "3", width = 15)
    private Integer gender;
    @Excel(name = "出生日期", orderNum = "4", width = 30, format = "yyyy-MM-dd")
    private Date birthday;
    @Excel(name = "手机号码", orderNum = "5", width = 15)
    private String phone;
}

ExcelUtils

/**
 * @description: Excel导入导出工具类
 */
@Component
public class ExcelUtils {

    /**
     * 对外的导出excel方法,exportExcel重载方法
     * 该方法通过传入ExportParams对象参数指定标题和表名称
     *
     * @param fileName     文件名称
     * @param exportParams ExportParams对象,导出参数
     * @param exportClass  导出对象的字节码对象
     * @param exportData   导出的数据
     * @param response     HttpServletResponse对象
     * @throws IOException IO异常
     */
    public static void exportExcel(String fileName, ExportParams exportParams, Class<?> exportClass, List<?> exportData, HttpServletResponse response) throws IOException {
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportClass, exportData);
        downloadExcel(fileName, workbook, response);
    }

    /**
     * 对外的导出excel方法,exportExcel重载方法
     * 该方法可以指定文件名称、标题名称、表名称
     *
     * @param fileName    文件名称
     * @param title       excel标题
     * @param sheetName   excel表名
     * @param exportClass 导出对象的字节码对象
     * @param exportData  导出的数据
     * @param response    HttpServletResponse对象
     * @throws IOException IO异常
     */
    public static void exportExcel(String fileName, String title, String sheetName, Class<?> exportClass, List<?> exportData, HttpServletResponse response) throws IOException {
        ExportParams exportParams = new ExportParams();
        exportParams.setTitle(title);
        exportParams.setCreateHeadRows(true);
        exportParams.setSheetName(sheetName);
        exportParams.setType(ExcelType.XSSF);
        defaultExport(fileName, exportParams, exportClass, exportData, response);
    }

    /**
     * 对外的导出excel方法,exportExcel重载方法(简化方法)
     * 该方法可以指定文件名称,默认标题和表名称为文件名称
     *
     * @param fileName    文件名称
     * @param exportClass 导出对象的字节码对象
     * @param exportData  导出的数据
     * @param response    HttpServletResponse对象
     * @throws IOException IO异常
     */
    public static void exportExcel(String fileName, Class<?> exportClass, List<?> exportData, HttpServletResponse response) throws IOException {
        ExportParams exportParams = new ExportParams();
        exportParams.setTitle(fileName);
        exportParams.setCreateHeadRows(true);
        exportParams.setSheetName(fileName);
        exportParams.setType(ExcelType.XSSF);
        defaultExport(fileName, exportParams, exportClass, exportData, response);
    }

    /**
     * 默认导出方法,私有
     *
     * @param fileName     文件名称
     * @param exportParams ExportParams对象,导出参数
     * @param exportClass  导出对象的字节码对象
     * @param exportData   导出的数据
     * @param response     HttpServletResponse对象
     * @throws IOException IO异常
     */
    private static void defaultExport(String fileName, ExportParams exportParams, Class<?> exportClass, List<?> exportData, HttpServletResponse response) throws IOException {
        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportClass, exportData);
        downloadExcel(fileName, workbook, response);
    }


    /**
     * 下载Excel,私有
     *
     * @param fileName 文件名称
     * @param workbook Workbook对象
     * @param response HttpServletResponse对象
     * @throws IOException IO异常
     */
    private static void downloadExcel(String fileName, Workbook workbook, HttpServletResponse response) throws IOException {
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        workbook.write(response.getOutputStream());
    }
}

导出Excel

@GetMapping("export")
public ResponseEntity<Void> export(HttpServletResponse response) throws Exception {
    List<User> exportData = userService.findList();
    ExcelUtils.exportExcel("用户列表",User.class,exportData,response);
    return ResponseEntity.ok().build();
}

该ExcelUtils导出工具类,导出的是.xlsx后缀类型的Excel文件,如果需要导出.xls后缀类型的文件,需要将工具类中response设置的Content-Disposition属性修改为application/vnd.ms-excel即可。

你可能感兴趣的:(Spring,java,excel,spring,boot,poi)