Excel 文件导出工具 ExcelKit

ExcelKit 介绍

ExcelKit 是简单、好用且轻量级的海量 Excel 文件导入导出解决方案。

  • GitHub:https://github.com/wenzewoo/ExcelKit
  • Gitee:https://gitee.com/wuwenze/ExcelKit/

ExcelKit 引入

<dependency>
    <groupId>com.wuwenze</groupId>
    <artifactId>ExcelKit</artifactId>
    <version>2.0.72</version>
</dependency>

ExcelKit 导出示例

ExcelMapping

ExcelMapping (配置 Excel 与实体之间的映射关系)

@Data
@Excel("user")
@Table(name = "tb_user")
public class User {
    @Id
    @ExcelField(value = "编号", width = 50)
    private Long id;

    @ExcelField(value = "用户名", width = 100)
    private String username;

    @ExcelField(value = "昵称", width = 100)
    private String nickname;

    @ExcelField(value = "邮箱", width = 150)
    private String email;

    @ExcelField(value = "电话号码", width = 100)
    private String phoneNumber;

    private Integer status;

    @ExcelField(value = "创建时间", dateFormat = "yyyy年MM月dd日 HH:mm:ss", width = 180)
    private Date createTime;

    @ExcelField(value = "修改时间", dateFormat = "yyyy年MM月dd日 HH:mm:ss",width = 180)
    private Date modifiedTime;

    @ExcelField(//
            value = "性别",
            readConverterExp = "男=1,女=0",
            writeConverterExp = "1=男,0=女"
            ,width = 50
    )
    private Integer sex;

    @ExcelField(value = "密码盐值", width = 100)
    private String salt;

    @ExcelField(//
            value = "用户类型",
            readConverterExp = "超级管理员=0,普通用户=1",
            writeConverterExp = "0=超级管理员,1=普通用户"
            ,width = 80
    )
    private Integer type;

    @ExcelField(value = "用户密码", width = 100)
    private String password;

    @ExcelField(value = "出生日期", dateFormat = "yyyy/MM/dd",width = 100)
    private Date birth;

    private Long departmentId;

    @ExcelField(value = "头像url", width = 200)
    private String avatar;

    private Integer is_corp;
}

下载 Controller

使用 ExcelKit 提供的 API 构建导入模板,会根据配置生成批注,下拉框等

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {

    @Autowired
    private UserService userService;
    
    @PostMapping("/excel")
    public void export(HttpServletResponse response) {
        List<User> users = this.userService.findAll();
        ExcelKit.$Export(User.class, response).downXlsx(users, false);
    }
}

方式二:GET 请求

@RequestMapping(value = "/exportKeyResult", method = RequestMethod.GET)
public void exportKeyResult(@RequestParam(value = "id", defaultValue = "1") Long id,HttpServletResponse response) {
    List<KeyResult> list = keyResultService.selectByKeyId(id);
    ExcelKit.$Export(KeyResult.class, response).downXlsx(list, false);
}

下载 HEML

方式一:elementUI

<el-button @click="downExcel" icon="el-icon-download">导出</el-button>

方式二:原生 HTML

<button type="button" class="btn btn-success btn-xs" onclick="exportKeyResult(${keyWord.id?default('')})">
    <i class="glyphicon glyphicon-circle-arrow-down"></i> 下载
</button>

下载 Script

方式一:vue

downExcel() {
    var $this = this;
    const res = axios
    .request({
        url: "/user/excel",
        method: "post",
        responseType: "blob"
    })
    .then(res => {
        if (res.headers["content-type"] === "application/json") {
            return $this.$message.error(
                "Subject does not have permission [user:export]"
            );
        }
        const data = res.data;
        let url = window.URL.createObjectURL(data); // 将二进制文件转化为可访问的url
        var a = document.createElement("a");
        document.body.appendChild(a);
        a.href = url;
        a.download = "用户列表.xls";
        a.click();
        window.URL.revokeObjectURL(url);
    });
}

方式二:js

function exportKeyResult(id){
    window.location="exportKeyResult?id="+id;
}

下载效果

下载文件:

image-20201124114137155

打开效果:

image-20201124114254144