- 这两个都是用来操作Excel的,POI是Apache的产品,easyExcel是阿里的产品,都是IO处理组件。
应用场景:把数据导出到Excel,或者吧Excel数据录入到数据库
这两个对比呢?POI是比较原生的,但是缺点就是内存消耗比较大,当Excel文件过大时有可能造成内存溢出,easyExcel则对POI进行了优化,解决了性能方面的问题。
- POI的写操作
下载了相关的jar包后,就可以进行操作了。
- 首先需要创建一个工作表,也就是Excel文件。
//1.创建一个工作簿 Workbook workbook = new HSSFWorkbook();
- 然后就需要创建一个sheet表。
//2.创建一个工作表 Sheet sheet = workbook.createSheet("何夜息");
- 在工作表上创建一个行
Row row = sheet.createRow(0);//0代表行号
- 创建一个单元格
//4.创建一个单元格 Cell cell = row.createCell(0); Cell cell2 = row.createCell(1);//第二列,依次类推
- 在单元格中填写数据
//5.在单元格中填写数据 cell1.setCellValue("第一行第一列的数据"); cell2.setCellValue("第一行第二列的数据");
- 生成一张表(IO流)
FileOutputStream fileOutputStream =new FileOutputStream("E:\\source\\WebWork\\JSP_MVC2\\s rc\\pro\\yunyuan\\service"+"test03.xls");
- 把文件IO流写入工作簿
workbook.write(fileOutputStream);
- 关闭IO流
fileOutputStream.close();
调用方法就能生成成功了!
打开文件可以看到写入成功了
完整代码如下:
package pro.yunyuan.service; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import java.io.FileOutputStream; public class POITest { public void WriteData() throws Exception { //1.创建一个工作簿 Workbook workbook = new HSSFWorkbook(); //2.创建一个工作表 Sheet sheet = workbook.createSheet("何夜息"); //3.创建一个行 Row row = sheet.createRow(0); //4.创建一个单元格 Cell cell1 = row.createCell(0); Cell cell2 = row.createCell(1);//第二列,依次类推 //5.在单元格中填写数据 cell1.setCellValue("第一行第一列的数据"); cell2.setCellValue("第一行第二列的数据"); //6.生成表格 FileOutputStream fileOutputStream = new FileOutputStream("E:\\source\\WebWork\\JSP_MVC2\\src\\pro\\yunyuan\\service"+"test03.xls"); //把文件io写入工作簿 workbook.write(fileOutputStream); //关闭io流 fileOutputStream.close(); System.out.println("文件生成成功"); } }
注意:03版本使用HSSFWorkbook,但是只能支持65536行,当需要录入大数据时,需要使用07版本的,代码不变,只要把HSSFWorkbook改为XSSFWorkbook,同时后缀改为xlsx就行了。
这两者的区别就是:03版本写入速度比07要快,但是行数有限。
为了让07版的在输入几百万行数据是,为了提高速度,就有了XSSFWorkbook的升级版,也就是提供了新的接口,就是SXSSFWorkbook,这是一个优化的版本,能够写入大数据,同时速度更快。但是这个会产生临时文件哦,需要清除临时文件。
- POI读操作
- 首先需要获取文件的输入流
FileInputStream fileInputStream = new FileInputStream("E:\\test.xls");
- 通过获取文件流创建工作簿
Workbook workbook = new HSSFWorkbook(fileInputStream);
- 然后就使用get进行如果写一下的操作
Sheet sheet = workbook.getSheetAt(0);
Row row = sheet.getRow(0);
Cell cell = row.getCell(0);
System.out.println(cell.getStringCellValue());
需要注意的是:因为表格的数据类型是不一样的,所以需要用不同的方法去获取,类似于获取数据库记录一样,需要用不同的数据类型去接收。
int cellConut = rowTitle.getPhysicalNumberOfCells();//获取当前行有数据的列