EasyPOI 是一款Excel导入/导出操作的工具包,特点在于减少Java代码。
Maven坐标
<!-- EasyPOI -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.3.0</version>
</dependency>
Entity
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* <p> @Title User
* <p> @Description 用户实体
*
* @author zhj
* @date 2021/4/25 17:32
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
/**
* 用户名
* orderNum 注解导出顺序
* width 列宽
* isImportField 导入时判断是否为必填,必填
*/
@Excel(name="用户名", orderNum = "0", width = 30, isImportField = "true_st")
private String username;
/** 密码 */
@Excel(name="密码", orderNum = "2", width = 30)
private String password;
/**
* 性别
* replace 码表替换
*/
@Excel(name = "性别", orderNum = "1", width = 30, replace = { "男_1", "女_2" }, suffix = "生")
private int sex;
/** 创建时间 */
@Excel(name="创建时间", orderNum = "3", width = 35, format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}
Controller
private static final Logger LOGGER = LoggerFactory.getLogger(HelloController.class);
/**
* 导出用户.
*/
@RequestMapping(value = "/export", method = RequestMethod.POST)
@ResponseBody
public void export(@RequestParam Long id, HttpServletResponse response) {
LOGGER.info("用户 id: {} ", new Object[]{id});
try {
service.export(id, response);
} catch (Exception e) {
e.printStackTrace();
}
}
ServiceImpl
@Override
public void export(Long id, HttpServletResponse response) throws IOException {
// 导出
response.setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + URLEncoder.encode("用户-导出.xls", "utf-8"));
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("用户数据", "sheet1"), User.class, list);
workbook.write(response.getOutputStream());
}
js
function exportExcel() {
var url = _ctx + "/export";
var xhr = new XMLHttpRequest();
var str = "id=" + row.id;
xhr.open('POST', url, true); //也可以使用POST方式,根据接口
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.responseType = "blob"; //返回类型blob
xhr.onload = function () {
//定义请求完成的处理函数
if (this.status === 200) {
var blob = this.response;
if(blob.size>0){
var reader = new FileReader();
reader.readAsDataURL(blob); // 转换为base64,可以直接放入a标签href
reader.onload = function (e) {
// 转换完成,创建一个a标签用于下载
var a = document.createElement('a');
a.download = row.id + '用户数据.xls';
a.href = e.target.result;
$("body").append(a); // 修复firefox中无法触发click
a.click();
$(a).remove();
}
}else{
window.location.reload();
}
}
};
xhr.send(str);
}
导出结果: