java利用EasyPoi實現Excel導出功能


easypoi功能如同名字easy,主打的功能就是容易,讓一個沒見接觸過poi的人員 就可以方便的寫出Excel導出,Excel模板導出,Excel導入,Word模板導出,通過簡單的注解和模板 語言(熟悉的表達式語法),完成以前復雜的寫法。

具體實現步驟:

1、Maven中添加依賴

        <!--easypoi導出excel-->
        <!--easypoi-base 導入導出的工具包,可以完成Excel導出,導入,Word的導出,Excel的導出功能-->
        <dependency>
            <groupId>org.jeecg</groupId>
            <artifactId>easypoi-base</artifactId>
            <version>${easypoi-base.version}</version>
        </dependency>
        <!--easypoi-web  耦合了spring-mvc 基於AbstractView,極大的簡化spring-mvc下的導出功能-->
        <dependency>
            <groupId>org.jeecg</groupId>
            <artifactId>easypoi-web</artifactId>
            <version>${easypoi-web.version}</version>
        </dependency>
        <!--easypoi-annotation 基礎注解包,作用與實體對象上,拆分后方便maven多工程的依賴管理-->
        <dependency>
            <groupId>org.jeecg</groupId>
            <artifactId>easypoi-annotation</artifactId>
            <version>${easypoi-annotation.version}</version>
        </dependency>

2、POJO中添加注解

/**
 * <p>
 * 管理員表
 * </p>
 * 
 * @Excel所含的參數:
 *  name:導入導出字段名稱,比如: name = "學生姓名" 
 *  replace :替換值,比如:replace = {"男_1","女_2"}
 *  width :寬度,比如:width = 30,默認10
 *  height :高度(一個設置全局生效), height = 20  ,默認10
 *  orderNum :排序,默認0
 *  format :時間格式化
 *  type :導出字段類型導出類型 1 是文本 2 是圖片,3是函數默認是文本,默認1
 *  imageType :圖片類型, 導出類型 1 從file讀取 2 是從數據庫中讀取,默認1
 *  savePath :圖片保存路徑,默認upload 
 * 
 */
@ExcelTarget("user")
public class User extends Model<User> {

    private static final long serialVersionUID = 1L;

    /**
     * 主鍵id
     */
    @TableId(value="id", type= IdType.AUTO)
    private Integer id;
    /**
     * 頭像
     */
    private String avatar;
    /**
     * 賬號
     */
    @Excel(name = "賬號", orderNum = "1", mergeVertical = true, isImportField = "account")
    private String account;
    /**
     * 密碼
     */
    private String password;
    /**
     * md5密碼鹽
     */
    private String salt;
    /**
     * 名字
     */
    @Excel(name = "姓名", orderNum = "2", mergeVertical = true, isImportField = "name")
    private String name;
    /**
     * 生日
     */
    private Date birthday;
    /**
     * 性別(1:男 2:女)
     */
    private Integer sex;
    /**
     * 電子郵件
     */
    @Excel(name = "郵箱", orderNum = "6", mergeVertical = true, isImportField = "email", width = 30)
    private String email;
    /**
     * 電話
     */
    @Excel(name = "電話", orderNum = "7", mergeVertical = true, isImportField = "phone",width = 30)
    private String phone;
    /**
     * 角色id
     */
    private String roleid;
    /**
     * 部門id
     */
    private Integer deptid;
    /**
     * 狀態(1:啟用  2:凍結  3:刪除)
     */
    private Integer status;
    /**
     * 創建時間
     */
    @Excel(name = "創建時間", orderNum = "8", mergeVertical = true, isImportField = "createtime" ,format="yyyy-MM-dd hh:mm:ss",width = 30)
    private Date createtime;
    /**
     * 保留字段
     */
    private Integer version;
    
    
    /**
     * 用於EXCEL導出的相關字段,與Warpper中翻譯字段對應
     * transient:去序列化,防止將這些字段加入到sql語句中導致sql報錯
     */
    @Excel(name = "性別", orderNum = "3", mergeVertical = true, isImportField = "sexName")
    private transient String sexName;
    
    @Excel(name = "角色", orderNum = "4", mergeVertical = true, isImportField = "roleName" , width = 20)
    private transient String roleName;
    
    @Excel(name = "部門", orderNum = "5", mergeVertical = true, isImportField = "deptName")
    private transient String deptName;
    
    @Excel(name = "狀態", orderNum = "9", mergeVertical = true, isImportField = "statusName")
    private transient String statusName;


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getRoleid() {
        return roleid;
    }

    public void setRoleid(String roleid) {
        this.roleid = roleid;
    }

    public Integer getDeptid() {
        return deptid;
    }

    public void setDeptid(Integer deptid) {
        this.deptid = deptid;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Date getCreatetime() {
        return createtime;
    }

    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }

    public Integer getVersion() {
        return version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }

    @Override
    protected Serializable pkVal() {
        return this.id;
    }

    public String getSexName() {
        return sexName;
    }

    public void setSexName(String sexName) {
        this.sexName = sexName;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public String getDeptName() {
        return deptName;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

    public String getStatusName() {
        return statusName;
    }

    public void setStatusName(String statusName) {
        this.statusName = statusName;
    }
    
}

3、Controller中請求

  // 下載execl文檔
  @RequestMapping("/downloadExcel")
  public void download(HttpServletRequest request, HttpServletResponse response) throws Exception {
    // 告訴瀏覽器用什么軟件可以打開此文件
    response.setHeader("content-Type", "application/vnd.ms-excel");
    // 下載文件的默認名稱
    response.setHeader("Content-Disposition", "attachment;filename=" + new String("用戶數據表".getBytes("gbk"), "iso8859-1")+".xls"); 
    //編碼
    response.setCharacterEncoding("UTF-8");
    List<User> list = userService.findAll();
    Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), User.class, list);
    workbook.write(response.getOutputStream());
  }

4、前端頁面添加Button

<input type="button" value="導出為Excel" onclick="window.open('/downloadExcel');"/>

導出功能實現!


免責聲明!

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



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