easyexcel和poi是否有版本冲突_POI和easyExcel

本文介绍了Apache POI和阿里巴巴的EasyExcel在处理Excel时的不同,并提供了03版和07版Excel的生成代码示例。通过示例展示了如何创建、写入和读取Excel数据,同时探讨了在不同场景下选择合适工具的重要性。
摘要由CSDN通过智能技术生成

1.常用场景

(1)将用户数据导出为excel表格(导出数据)

(2)将Excel表中的数据导出到网站数据库中

操作Excel最常用的就是Apache的POI和阿里巴巴的easyExcel。

2.官网地址

3.poi和easyExecel的区别:

以下是我在官网截的图:

4.Excel中的对象

在java中万物皆对象,Excel也不例外,Excel中的对象有:

工作簿:Workbook(是一个接口)

(使用时需要导入Workbook:import org.apache.poi.ss.usermodel.Workbook;)

Workbook的三个实现类:

(1)HSSFWorkbook:HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;

(2)XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx;

(3)SXSSFworkbook:是XSSFWorkbook的升级版,当数据量超出65536条后,在使用HSSFWorkbook或XSSFWorkbook,程序会报OutOfMemoryError:Javaheap space;内存溢出错误。这时应该用SXSSFworkbook。

工作表:Sheet (使用时需要导入Sheet:import org.apache.poi.ss.usermodel.Sheet;)

行:Row     (使用时需要导入Row:import org.apache.poi.ss.usermodel.Row;)

列:Cell  (使用时需要导入Cell  :import org.apache.poi.ss.usermodel.Cell;)

5.03版Excel表的生成代码:

package com.lqz.controller;

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 org.junit.Test;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

/**

* @Author:liqinzhen

* @Date:2020/6/9

* @Description:

*/

public class ExcelWriteTest {

String path = "E:\\java\\project\\springmvc-ajax-json";

@Test

public void test() throws IOException {

//1.创建一个工作簿

Workbook workbook = new HSSFWorkbook();

//2.创建一个工作表,因为工作表在工作簿中,所以用工作簿创建工作表

Sheet sheet = workbook.createSheet("学生表");

//3.创建一个 行

Row row1 = sheet.createRow(0);

//4.创建一个单元格

Cell cell11 = row1.createCell(0);

//给单元格设置值

cell11.setCellValue("陈咬金");;

//创建第二个单元格

Cell cell12 = row1.createCell(1);

cell12.setCellValue("1021");

//创建第二行

Row row2 = sheet.createRow(1);

//创建第二行的第一个单元格

Cell cell21 = row2.createCell(0);

cell21.setCellValue("芈月");

//创建第二行的第二个单元格

Cell cell22 = row2.createCell(1);

cell22.setCellValue("1023");

//生成一张表(io流),03版的Excel使用.xls结尾

FileOutputStream fileOutputStream = new FileOutputStream(path "学生表03.xls");

//输出

workbook.write(fileOutputStream);

//关闭流

fileOutputStream.close();

System.out.println("学生表03.xls表生成完毕");

}

}

6.07版的Excel生成代码:

//(1)导入少量数据

package com.lqz.controller;

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 org.junit.Test;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

/**

* @Author:liqinzhen

* @Date:2020/6/9

* @Description:

*/

public class ExcelWriteTest {

String path = "E:\\java\\project\\springmvc-ajax-json";

@Test

public void test() throws IOException {

//1.创建一个工作簿

Workbook workbook = new XSSFWorkbook();

//2.创建一个工作表,因为工作表在工作簿中,所以用工作簿创建工作表

Sheet sheet = workbook.createSheet("学生表");

//3.创建一个 行

Row row1 = sheet.createRow(0);

//4.创建一个单元格

Cell cell11 = row1.createCell(0);

//给单元格设置值

cell11.setCellValue("陈咬金");;

//创建第二个单元格

Cell cell12 = row1.createCell(1);

cell12.setCellValue("1021");

//创建第二行

Row row2 = sheet.createRow(1);

//创建第二行的第一个单元格

Cell cell21 = row2.createCell(0);

cell21.setCellValue("芈月");

//创建第二行的第二个单元格

Cell cell22 = row2.createCell(1);

cell22.setCellValue("1023");

//生成一张表(io流),03版的Excel使用.xls结尾

FileOutputStream fileOutputStream = new FileOutputStream(path "学生表07.xls");

//输出

workbook.write(fileOutputStream);

//关闭流

fileOutputStream.close();

System.out.println("学生表07.xls表生成完毕");

}

}

//(2)批量数据导入

@Test

public void test02() throws IOException {

String path = "E:\\java\\project\\springmvc-ajax-json";

//1.创建一个工作簿

HSSFWorkbook workbook = new HSSFWorkbook();

//2.创建一个工作表

HSSFSheet sheet = workbook.createSheet();

for (int rowNum = 0;rowNum<65536;rowNum ){

//3.创建行

Row row = sheet.createRow(rowNum);

for (int cellNum = 0;cellNum <5;cellNum ){

Cell cell = row.createCell(cellNum);

cell.setCellValue(cellNum);

}

}

System.out.println("写入完毕");

FileOutputStream fileOutputStream = new FileOutputStream(path "工作表03.xls");

workbook.write(fileOutputStream);

//关闭流

fileOutputStream.close();

}

//(3)读取Excel文件

@Test

public void readExcelTest() throws IOException {

//获取文件流

FileInputStream fileInputStream = new FileInputStream(path "学生表03.xls");

//创建一个工作簿

HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);

//得到表

Sheet sheet = workbook.getSheetAt(0);

//得到行

Row row = sheet.getRow(0);

//得到列

Cell cell = row.getCell(0);

System.out.println(cell.getStringCellValue());

fileInputStream.close();

}

//读取不同数据类型

@Test

public void testCellType() throws IOException {

//获取文件流

FileInputStream fileInputStream = new FileInputStream(path "学生表03.xls");

//创建一个工作簿

HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);

HSSFSheet sheet = workbook.getSheetAt(0);

//获取标题,表的第一行

Row rowTile = sheet.getRow(0);

//如果第一行不为空

if (rowTile != null) {

//读取第一行列的数量

int numberOfCells = rowTile.getPhysicalNumberOfCells();

//循环遍历每一列

for (int i = 0; i < numberOfCells; i ) {

//获得列

Cell cell = rowTile.getCell(i);

//如果列不为空

if (cell != null) {

//获取列的类型

CellType cellType = cell.getCellType();

String stringCellValue = cell.getStringCellValue();

System.out.print(stringCellValue "|");

}

}

}

System.out.println();

//获取行内容,行的数量

int numberOfRows = sheet.getPhysicalNumberOfRows();

//循环获取每一行

for (int i = 1; i < numberOfRows; i ) {

//获得行

Row row = sheet.getRow(i);

if (row != null) {

//获取列

int numberOfCells1 = rowTile.getPhysicalNumberOfCells();

for (int j = 0; j < numberOfCells1; j ) {

System.out.print("[" (j 1) (numberOfCells1 1) "]");

Cell cell = rowTile.getCell(j);

//匹配列的数据类型

if (cell != null) {

CellType cellType = cell.getCellType();

String cellValue = "";

switch (cellType) {

case STRING:

System.out.println("[STRING]");

cellValue = cell.getStringCellValue();

break;

case BOOLEAN:

System.out.println("[BOOLEAN]");

cellValue = String.valueOf(cell.getStringCellValue());

break;

case BLANK://空

System.out.println("[BOOLEAN]");

break;

case NUMERIC://空

System.out.println("[NUMERIC]");//数字(普通数字,日期)

if (HSSFDateUtil.isCellDateFormatted(cell)) {

System.out.println("[日期]");

Date date = cell.getDateCellValue();

cellValue = new DateTime(date).toString("yyyy-MM-dd");

} else {

System.out.println("转换为字符串输出");

cell.setCellType(STRING);

cellValue = cell.toString();

}

break;

case ERROR://空

System.out.println("[数据类型错误]");

break;

}

System.out.println(cellValue);

}

}

}

}

//关闭流

fileInputStream.close();

}

来源:https://www.icode9.com/content-4-708351.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值