第一步:导入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
第二步:创建实体类
@Data
public class ExcelData {
// 设置excel表头名称
@ExcelProperty("学生编号")
private Integer sno;
@ExcelProperty("学生姓名")
private String sname;
}
第三步: 创建执行main
public class ExcelTest {
public static void main(String[] args) {
// 实现 excel 写操作
// 设置写入文件夹地址 和 文件名称
String filename = "E:\\write.xlsx";
// 调用easyExcel 里面的方法
EasyExcel.write(filename,ExcelData.class).sheet("stuname").doWrite(getData());
}
private static List<ExcelData> getData() {
List<ExcelData> list = new ArrayList<>();
for (int i=0; i<10; i++) {
ExcelData ed = new ExcelData();
ed.setSno(i);
ed.setSname("lsr" + i);
list.add(ed);
}
return list;
}
}
前端处理代码
handleExport() {
this.exportLoading = true
const dateStr = this.dateFormat()
const fileName = '国际运价计算引擎运维Tbl900查询迭代列表_' + dateStr + '.xlsx'
this.queryData = this.$refs.queryCondition._data.form
downFile(this.queryData).then(res => {
try{
// 将文件流转成blob形式
const blob = new Blob([res], { type: 'application/vnd.ms-excel' })
// 创建一个超链接,将文件流赋进去,然后实现这个超链接的单击事件
const eLink = document.createElement('a')
eLink.download = fileName
eLink.style.display = 'none'
eLink.href = URL.createObjectURL(blob)
document.body.appendChild(eLink)
eLink.click()
URL.revokeObjectURL(eLink.href) // 释放URL 对象
document.body.removeChild(eLink)
this.$message.success("导出成功")
this.exportLoading = false
}
catch(err){
this.$message.error("导出成功")
}
})
},
EasyExcel 设置行宽列高
注解形式
@Getter
@Setter
@EqualsAndHashCode
@ContentRowHeight(10)
@HeadRowHeight(20)
@ColumnWidth(25)
public class WidthAndHeightData {
@ExcelProperty("字符串标题")
private String string;
@ExcelProperty("日期标题")
private Date date;
/**
* 宽度为50
*/
@ColumnWidth(50)
@ExcelProperty("数字标题")
private Double doubleData;
}
非注解形式
EasyExcel.write(outputStream)
// 这里放入动态头
.head(headNameList)
// java以点分割要转义符
.sheet(fileName.split("\\.")[0])
// 注册策略
.registerWriteHandler(new SimpleColumnWidthStyleStrategy(20)) // 简单的列宽策略,列宽20
.registerWriteHandler(new SimpleRowHeightStyleStrategy((short)30,(short)20)) // 简单的行高策略:头行高30,内容行高20
.doWrite(datalist);