Java操作excel的三种常见⽅法实例
⽬录
前⾔
⼀、Apache poi
1.1 ⾸先添加依赖
1.2 导出excel
1.2.1 HSSF⽅式导出(.xls⽅式)
1.2.2 XSSF⽅式导出(.xlsx)
1.2.3、SXSSF⽅式导出
1.3 导⼊excel
1.3.1 HSSF⽅式导⼊
1.3.2 XSSF⽅式导⼊
1.3.3 SXSSF⽅式导⼊
⼆、Easypoi
2.1 添加依赖包
2.2 采⽤注解导出导⼊
2.2.1 导出操作
2.2.2 导⼊操作
2.3 ⾃定义数据结构导出导⼊
2.3.1 导出操作
2.3.2 导⼊操作
三、Easyexcel
3.1 添加依赖包
3.2 采⽤注解导出导⼊
3.2.1 导出操作
3.3 ⾃定义数据结构导出导⼊
3.3.1 导出操作
3.3.2 导⼊操作
四、总结
前⾔
在平时的业务系统开发中,少不了需要⽤到导出、导⼊excel功能,今天我们就⼀起来总结⼀下!
下⾯给⼤家介绍⼀下⼏种常⽤⽅法:
apache poi
easypoi
easyexcel
⼀、Apache poi
⼤概在很久很久以前,微软的电⼦表格软件 Excel 以操作简单、存储数据直观⽅便,还⽀持打印报表,在诞⽣之初,可谓深得办公室⾥的⽩领青睐,极⼤的提升了⼯作的效率,不久之后,便成了办公室⾥的必备⼯具。
随着更多的新语⾔的崛起,例如我们所熟悉的 java,后来便有⼀些团队开始开发⼀套能与 Excel 软件⽆缝切换的操作⼯具!
当然,在java⽣态体系⾥⾯,能与Excel⽆缝衔接的第三⽅⼯具还有很多,在开始也给⼤家列出来三个,因为 apache poi 在业界使⽤的最⼴泛,因此其他的⼯具不做过多介绍!
话不多说,直接开撸!
1.1 ⾸先添加依赖
<dependencies>
<!--xls(03)-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<!--xlsx(07)-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<!--时间格式化⼯具-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.6</version>
</dependency>
</dependencies>
1.2 导出excel
导出操作,即使⽤ Java 写出数据到 Excel 中,常见场景是将页⾯上的数据导出,这些数据可能是财务数据,也可能是商品数据,⽣成 Excel 后返回给⽤户下载⽂件。
在 poi ⼯具库中,导出 api 可以分三种⽅式
HSSF⽅式:这种⽅式导出的⽂件格式为office 2003专⽤格式,即.xls,优点是导出数据速度快,但是最多65536⾏数据
XSSF⽅式:这种⽅式导出的⽂件格式为office 2007专⽤格式,即.xlsx,优点是导出的数据不受⾏数限制,缺点导出速度慢
SXSSF⽅式: SXSSF 是 XSSF API的兼容流式扩展,主要解决当使⽤ XSSF ⽅式导出⼤数据量时,内存溢出的问题,⽀持导出⼤批量的excel数据
1.2.1 HSSF⽅式导出(.xls⽅式)
HSSF⽅式,最多只⽀持65536条数据导出,超过这个条数会报错!
st;
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;
/**
* HSSF⽅式导出:HSSF⽅式,最多只⽀持65536条数据导出,超过这个条数会报错!
* 就是.xls模式
*/
public class ExcelWrite2003Test {
private static String PATH = "/Users/lixin/Desktop/";//⾃⼰输出的路径
public static void main(String[] args) throws Exception {
//时间
long begin = System.currentTimeMillis();
//创建⼀个⼯作簿
Workbook workbook = new HSSFWorkbook();
//创建表
Sheet sheet = ateSheet();
//写⼊数据
for (int rowNumber = 0; rowNumber < 65536; rowNumber++) {
//创建⾏
Row row = ateRow(rowNumber);
for (int cellNumber = 0; cellNumber < 10; cellNumber++) {
//创建列
Cell cell = ateCell(cellNumber);
cell.setCellValue(cellNumber);
}
}
System.out.println("结束!");
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "⽤户信息表-XLS.xls");
workbook.write(fileOutputStream);
fileOutputStream.close();
long end = System.currentTimeMillis();
System.out.println("时间为:"+(double) (end - begin) / 1000);//2.262s
}
}
1.2.2 XSSF⽅式导出(.xlsx)
XSSF⽅式⽀持⼤批量数据导出,所有的数据先写⼊内存再导出,容易出现内存溢出!
st;
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.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
/**
* .xlsx⽅式
*/
public class ExcelWrite2007Test {
public static String PATH = "/Users/lixin/Desktop/";
public static void main(String[] args) throws Exception {
//时间
long begin = System.currentTimeMillis();
//创建⼀个⼯作簿
Workbook workbook = new XSSFWorkbook();
//创建表
Sheet sheet = ateSheet();
/
/写⼊数据
for (int rowNumber = 0; rowNumber < 65537; rowNumber++) {
Row row = ateRow(rowNumber);
for (int cellNumber = 0; cellNumber < 10; cellNumber++) {
Cell cell = ateCell(cellNumber);
cell.setCellValue(cellNumber);
}
}
System.out.println("结束");
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "⽤户信息表-XLSX.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
long end = System.currentTimeMillis();
System.out.println((double) (end - begin) / 1000);//5.003s
}
}
1.2.3、SXSSF⽅式导出
SXSSF⽅式是XSSF⽅式的⼀种延伸,主要特性是低内存,导出的时候,先将数据写⼊磁盘再导出,避免报内存不⾜,导致程序运⾏异常,缺点是运⾏很慢!
st;
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.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.FileOutputStream;
public class ExcelWriteSXSSFTest {
public static String PATH = "/Users/lixin/Desktop/";
public static void main(String[] args) throws Exception {
//时间
long begin = System.currentTimeMillis();
//创建⼀个⼯作簿
Workbook workbook = new SXSSFWorkbook();
//创建表
Sheet sheet = ateSheet();
//写⼊数据
for (int rowNumber = 0; rowNumber < 100000; rowNumber++) {
Row row = ateRow(rowNumber);
for (int cellNumber = 0; cellNumber < 10; cellNumber++) {
Cell cell = ateCell(cellNumber);
cell.setCellValue(cellNumber);
}
}
System.out.println("over");
FileOutputStream fileOutputStream = new FileOutputStream(PATH + "⽤户信息表-SXSSF.xlsx");
workbook.write(fileOutputStream);
fileOutputStream.close();
long end = System.currentTimeMillis();
System.out.println((double) (end - begin) / 1000);//6.39s
}
}
1.3 导⼊excel
导⼊操作,即将 excel 中的数据采⽤java⼯具库将其解析出来,进⽽将 excel 数据写⼊数据库!同样,在 poi ⼯具库中,导⼊ api 也分三种⽅式,与上⾯的导出⼀⼀对应!
1.3.1 HSSF⽅式导⼊
st;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.joda.time.DateTime;
import java.io.FileInputStream;
import java.util.Date;
public class ExcelRead2003Test {
public static String PATH = "/Users/lixin/Desktop/";
public static void main(String[] args) throws Exception {
//获取⽂件流
FileInputStream inputStream = new FileInputStream(PATH + "⽤户信息表2003read.xls");
//1.创建⼯作簿,使⽤excel能操作的这边都看看操作
Workbook workbook = new HSSFWorkbook(inputStream);
//2.得到表
Sheet sheet = SheetAt(0);
//3.得到⾏
Row row = Row(0);
//4.得到列
Cell cell = Cell(0);
getValue(cell);
inputStream.close();
}
public static void getValue(Cell cell){
/
/匹配类型数据
if (cell != null) {
CellType cellType = CellType();
String cellValue = "";
switch (cellType) {
case STRING: //字符串
System.out.print("[String类型]");
cellValue = StringCellValue();
break;
case BOOLEAN: //布尔类型
System.out.print("[boolean类型]");
cellValue = String.BooleanCellValue());
break;
case BLANK: //空
System.out.print("[BLANK类型]");
break;
case NUMERIC: //数字(⽇期、普通数字)
System.out.print("[NUMERIC类型]");
if (HSSFDateUtil.isCellDateFormatted(cell)) { //⽇期
System.out.print("[⽇期]");
Date date = DateCellValue();
cellValue = new DateTime(date).toString("yyyy-MM-dd");
} else {
//不是⽇期格式,防⽌数字过长
System.out.print("[转换为字符串输出]");
cell.setCellType(CellType.STRING);
cellValue = String();
}
break;
case ERROR:
System.out.print("[数据类型错误]");
break;
}
System.out.println(cellValue);
}
}
}
输出结果类似如图所⽰:
1.3.2 XSSF⽅式导⼊
st;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;
import java.io.FileInputStream;
import java.util.Date;
public class ExcelRead2007Test {
java switch case stringpublic static String PATH = "/Users/lixin/Desktop/";
public static void main(String[] args) throws Exception {
//获取⽂件流
FileInputStream inputStream = new FileInputStream(PATH + "⽤户信息表2007read.xlsx"); //1.创建⼯作簿,使⽤excel能操作的这边都看看操作
Workbook workbook = new XSSFWorkbook(inputStream);
//2.得到表
Sheet sheet = SheetAt(0);
//3.得到⾏
Row row = Row(0);
//4.得到列
Cell cell = Cell(0);
getValue(cell);
inputStream.close();
}
public static void getValue(Cell cell){
//匹配类型数据
if (cell != null) {
CellType cellType = CellType();
String cellValue = "";
switch (cellType) {
case STRING: //字符串
System.out.print("[String类型]");
cellValue = StringCellValue();
break;
case BOOLEAN: //布尔类型
System.out.print("[boolean类型]");
cellValue = String.BooleanCellValue());
break;
case BLANK: //空
System.out.print("[BLANK类型]");
break;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论