导出excel的工具有很多,如poi,jxl等但是他们导出excel会比较的消耗内存,一旦数据大起来可能造成内存溢出,而easyexcel很好的避免了内存溢出的问题。
首先下载easyexcel的依赖包:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.0.4</version>
</dependency>
java模型映射(省略了get和set方法):
public class ClsModal extends BaseRowModel{
@ExcelProperty(value="班级编号",index=0)
private Integer cid;
@ExcelProperty(value="班级名称",index=1)
private String cname;
导出类:
package exportExcel;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.List;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.excel.support.ExcelTypeEnum;
public class ExportExcel {
public void export(List<ClsModal> clsList) {
try(OutputStream out=new FileOutputStream("C:\\Users\\hc\\Desktop\\exportCls.xlsx")) {
ExcelWriter writer=new ExcelWriter(out,ExcelTypeEnum.XLSX);
if(!clsList.isEmpty()) {
/**
* 1表示第1个工作表,
* 0表示从第几行开始读取数据,最小值为0
* clsList.get(0).getClass()表示要导出的实体类
* /
Sheet sheet=new Sheet(1,0,clsList.get(0).getClass());
sheet.setSheetName("导出班级测试");
writer.write(clsList, sheet);
}
writer.finish();
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试类:
package exportExcel;
import java.util.ArrayList;
import java.util.List;
public class ExportTest {
public static void main(String[] args) {
//准备数据
List<ClsModal> clsList=new ArrayList<ClsModal>();
for(int i=0;i<3;i++) {
ClsModal cls=new ClsModal();
cls.setCid(i);
cls.setCname("java"+i);
clsList.add(cls);
}
new ExportExcel().export(clsList);
}
}
测试结果:
如果是前后端分离,则只需要使用HttpServletResponse获得OutputStream流,然后再形成excel表,将其写入到输出流中,然后响应给前端即可。但注意要将响应的头设置成“Content-Disposition”。