Poi是操作Excel的一套规范,EasyPoi是Apache公司开发的一套框架,而EasyExcl是阿里开发的一套框架。EasyPoi是将表格一次行全部读到内存中再进行操作,因此很容易造成OOM,且对内存的消耗比较大;而EasyExcel是从磁盘中一行一行的读取表格,因此无论数据再大也不会出现OOM,且对内存的消耗很小
二、EasyPoi 1、对象介绍Excl中有工作簿Workbook、工作表sheet、行row、单元格cell,在EasyPoi中也有对应的对象,其中workbook是一个接口,他有三个实现类
- HSSF:2003版的Excl,只支持65536行数据(好像是)
- XSSF:2007版的Excl,可操作的数据不限
- SXSSF:在XSSF的基础上做了一些性能上的优化
3、写操作cn.afterturn easypoi-base 3.2.0 cn.afterturn easypoi-web 3.2.0 cn.afterturn easypoi-annotation 3.2.0
首先创建一个工作簿
//创建一个工作簿 Workbook workbook = new XSSFWorkbook();
接着创建工作表、行、单元格
//创建一张表
Sheet sheet = workbook.createSheet("example.xlsx");
//创建一行
Row row1 = sheet.createRow(0);
//创建单元格
Cell cell11 = row1.createCell(0);
Cell cell12 = row1.createCell(1);
Cell cell13 = row1.createCell(2);
向单元格中插入值
//向单元格中插入值
cell11.setCellValue("first");
cell12.setCellValue(new Date());
cell13.setCellValue(true);
向磁盘中写入文件
//创建一个输出流
File file = new File("D:\exclFile", "example.xlsx");
OutputStream outputStream = new FileOutputStream(file);
//向磁盘中写入Excl文件
workbook.write(outputStream);
若需要向页面中传入Excl文件,则只需要把输出流换成HttpServletResponse的流即可
ServletOutputStream outputStream = response.getOutputStream(); workbook.write(outputStream);
完整demo:
@Test
void testExcl() throws IOException {
//创建一个工作簿
Workbook workbook = new XSSFWorkbook();
//创建一张表
Sheet sheet = workbook.createSheet("demo.xlsx");
//创建一行
Row row1 = sheet.createRow(0);
//创建单元格
Cell cell11 = row1.createCell(0);
Cell cell12 = row1.createCell(1);
Cell cell13 = row1.createCell(2);
//向单元格中插入值
cell11.setCellValue("first");
cell12.setCellValue(new Date());
cell13.setCellValue(true);
//创建一个输出流
File file = new File("D:\exclFile", "demo.xlsx");
OutputStream outputStream = new FileOutputStream(file);
//向磁盘中写入Excl文件
workbook.write(outputStream);
}
4、读操作
读与写类型,都需要创建一个WorkBook对象,获取到表,遍历获取行,再遍历获取单元格;其区别就是需要根据数据类型执行不同的操作
完整demo如下:
ExclReceive结构:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExclReceive {
private String stringValue;
private Double numberValue;
private Boolean booleanValue;
private Date datevalue;
}
读操作
public static ListreadExcl(InputStream inputStream){ //创建返回值集合 List list=new ArrayList<>(); try { //创建工作簿 Workbook workbook = new XSSFWorkbook(inputStream); //获取表 Sheet sheet = workbook.getSheetAt(0); //获取标题并打印 Row title = sheet.getRow(0); int titleCount = sheet.getRow(0).getPhysicalNumberOfCells(); for (int i=0;i 三、EasyExcel
EasyExcel是阿里巴巴的一个开源项目,操作很简单,相较于EasyPoi代码量更少,其具体操作可参考官网:
EasyExcel · 语雀 (yuque.com)



