赞
踩
在工作的开发过过程中,我们总会遇到将数据导出到excel的需求,和导入excel到数据库,下面会讲解当今比较流行的两个工具实现Java操作excel:
使用poi会相对比较原生,相较于easyExcel比较复杂(easyExcel读写的时候可以做到一行代码就可以搞定,相当优雅)
针对上图的基本功能的 1 ,2,workbook的实现类有三个接口。其中SXSSFWorkbook操作excel07版XSSF的升级,速度比XSSF更快。具体下面有写。
都入相关依赖
<!--xls 03-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<!--xlsx 07版本-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<!-- 测试依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
03版本写excel
@Test
public void writeExcel03() throws IOException {
String path = "E:\\excel\\";
//创建一个工作簿
Workbook workbook = new HSSFWorkbook();
//创建一个工作表
Sheet sheet = workbook.createSheet("sheet01");
//创建行
Row row01 = sheet.createRow(0);//行从0开始,第一行
//创建一个单元格
Cell cell01 = row01.createCell(0);//列也是从0开始
//设置单元格中的内容
cell01.setCellValue("码农");
Cell cell02 = row01.createCell(1);
cell02.setCellValue("IT民工");
FileOutputStream outputStream = new FileOutputStream(path + "码农.xls");
//工作簿通过流写出
workbook.write(outputStream);
outputStream.close();
System.out.println(">>>>>>>>excel 03 write finish");
}
07版本:跟03版本基本一样,只是工作簿的对象不同(03-HSSFWorkbook;07-XSSFWorkbook),和文件后缀的不同
@Test
public void writeExcel07() throws IOException {
String path = "E:\\excel\\";
//创建一个工作簿
Workbook workbook = new XSSFWorkbook();
//创建一个工作表
Sheet sheet = workbook.createSheet("sheet01");
//创建行
Row row01 = sheet.createRow(0);//行从0开始,第一行
//创建一个单元格
Cell cell01 = row01.createCell(0);//列也是从0开始
//设置单元格中的内容
cell01.setCellValue("码农");
Cell cell02 = row01.createCell(1);
cell02.setCellValue("IT民工");
FileOutputStream outputStream = new FileOutputStream(path + "07码农.xlsx");
//工作簿通过流写出
workbook.write(outputStream);
outputStream.close();
System.out.println(">>>>>>>>excel 07 write finish");
}
运行之后的效果图
下面例子用时 2秒
@Test
public void bigDatawriteExcel03() throws IOException {
String path = "E:\\excel\\";
long beginTime = System.currentTimeMillis();
//创建一个工作簿
Workbook workbook = new HSSFWorkbook();
//创建一个工作表
Sheet sheet = workbook.createSheet("sheet01");
//创建行
for (int i = 0; i< 65536; i ++) {
Row row = sheet.createRow(i);
for (int j = 0 ; j < 10; j++) {
Cell cell = row.createCell(j);
cell.setCellValue(j);
}
}
FileOutputStream outputStream = new FileOutputStream(path + "bigData03码农.xls");
//工作簿通过流写出
workbook.write(outputStream);
outputStream.close();
long endTime = System.currentTimeMillis();
System.out.println("用时" + ((endTime-beginTime) / 1000) + " 秒" );
}
下面例子用时 7秒.
虽然它比03的用时长,但是它比03可以写更多的数据,比如超过6553行的数据都可以,而03的超过6553行就会报错
@Test
public void bigDatawriteExcel07() throws IOException {
String path = "E:\\excel\\";
long beginTime = System.currentTimeMillis();
//创建一个工作簿
Workbook workbook = new XSSFWorkbook();
//创建一个工作表
Sheet sheet = workbook.createSheet("sheet01");
//创建行
for (int i = 0; i< 65536; i ++) {
Row row = sheet.createRow(i);
for (int j = 0 ; j < 10; j++) {
Cell cell = row.createCell(j);
cell.setCellValue(j);
}
}
FileOutputStream outputStream = new FileOutputStream(path + "bigData07码农.xlsx");
//工作簿通过流写出
workbook.write(outputStream);
outputStream.close();
long endTime = System.currentTimeMillis();
System.out.println("用时" + ((endTime-beginTime) / 1000) + " 秒" );
}
此例子用SXSSF用时1.5秒
@Test
public void bigDatawriteExcelS07() throws IOException {
String path = "E:\\excel\\";
long beginTime = System.currentTimeMillis();
//创建一个工作簿
Workbook workbook = new SXSSFWorkbook();
//创建一个工作表
Sheet sheet = workbook.createSheet("sheet01");
//创建行
for (int i = 0; i< 65536; i ++) {
Row row = sheet.createRow(i);
for (
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。