Java实现Excel导入导出

作者: adm 分类: java 发布时间: 2021-08-05 09:14

一、读取Excel常用的三种方式 (本文讲解97-2003 或更高版本)最底下有码云地址,不用一个个敲

1、POI

2、JXL

3、FASTEXCEL

二、POI

Apache POI 是Apache软件基金会的开放源码函式库,POI提供API给java程序对Microsoft Office格式档案读和写的功能

HSSF 是Horrible SpreadSheet Format的缩写,也即 “讨厌的电子表达格式”。通过 HSSF,你可以用纯java代码来读取、写入、修改Excel文件。

知识点补充:

HSSF – 读写Microsoft Excel 格式档案的功能。

XSSF – 读写Microsoft Excel OOXML格式档案的功能。

HWPF – 读写Microsoft Word 格式档案的功能。

HSLF – 读写Microsoft PowerPoint格式档案的功能。

HDGF – 读写Microsoft Visio格式档案的功能

如果想生成 PDF 可以使用 iText 技术

通过iText不仅可以生成PDF或者rtf 的文档,而且可以将XML、Html文件转化成PDF文件

下载iText.jar 文件以后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。

二、JXL

java Execl是一开放的源码项目,可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。

包括常见格式的设置:字体,颜色,背景,合并单元格等。

三、POI 、 JXL 对比

POI 效率高 JXL效率低

POI 操作相对复杂 JXL操作简单

POI 支持字体、数字、日期操作 JXL支持字体、数字、日期操作

POI 能修饰单元格属性 JXL能支持修饰单元格属性,格式支持不如POI强大

POI 支持公式,宏,图像图表一些企业应用上会非常实用 JXL 部分支持

四、FastExcel

FastExcel是一个采用纯java开发的excel文件读写组件,支持Excel 97-2003文件格式。

FastExcel只能读取单元格的字符信息,而其他属性 如颜色、字体等就不支持了,因此FastExcel只需要很小的内存。

五、开始学习 (这里是pom方式引入)

1、Excel 实战 之 JXL

首先第一步引入JXL

<!-- jxl -->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.10</version>
</dependency>

实战之创建Excel

导入

package com.excel.demo.jxl;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

import java.io.File;

public class JxlCreateExcel {

public static void main(String[] args) {
// 首先设置表格第一行 表格头名称 也就是列名
String [] title = {"id","name","sex"};
// 创建Excel文件 存入路径
File file = new File("e:/jxl.xls");
try {
file.createNewFile();
// 创建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(file);
// 创建sheet
WritableSheet sheet = workbook.createSheet("sheet1",0);
// 添加数据
Label label = null;
// 第一行设置列名
for (int i = 0; i < title.length; i++) {
label = new Label(i,0,title[i]);
sheet.addCell(label);
}
// 追加数据 从第二行开始 i从1开始
for (int i = 1; i < 9; i++) {
label = new Label(0,i,"id:"+i);
sheet.addCell(label);
label = new Label(1,i,"user");
sheet.addCell(label);
label = new Label(2,i,"男");
sheet.addCell(label);
}
// 写入 并在最后关闭流
workbook.write();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

导出
package com.excel.demo.jxl;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

import java.io.File;
import java.io.IOException;

public class JxlReadExcel {

public static void main(String[] args) {
try {
// 创建 Workbook
Workbook workbook = Workbook.getWorkbook(new File("e:/jxl.xls"));
// 获取工作表sheet
Sheet sheet = workbook.getSheet(0);
// 获取数据
for (int i = 0; i < sheet.getRows(); i++) {// 获取行
for (int j = 0; j < sheet.getColumns(); j++) {// 获取列
Cell cell = sheet.getCell(j,i);
System.out.print(cell.getContents() + " ");// 得到单元格的内容
}
System.out.println();
}
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

1、Excel 实战 之 POI

引入poi pom

<!-- poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>

<!-- commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.2</version>
</dependency>

创建Excel 代码如下:

导入

package com.excel.demo.poi;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.File;
import java.io.FileOutputStream;
public class PoiCreateExcel {

public static void main(String[] args) {
// 创建表头
String[] title = {"id","name","sex"};
//创建Excel工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个工作表shheet
HSSFSheet sheet = workbook.createSheet();
//创建第一行
HSSFRow row = sheet.createRow(0);
HSSFCell cell = null;
// 插入第一行
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
}
// 追加数据
for (int i = 1; i < 10; i++) {// 这里的int 起始是1 也就是第二行开始
HSSFRow nexTrow = sheet.createRow(i);
HSSFCell cell2 = nexTrow.createCell(0);
cell2.setCellValue("a"+i);
cell2 = nexTrow.createCell(1);
cell2.setCellValue("user");
cell2 = nexTrow.createCell(2);
cell2.setCellValue("男");
}
// 创建一个文件
File file = new File("e:/poi.xls");
try {
file.createNewFile();
// 将内容存盘
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);

stream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
导出
package com.excel.demo.poi;

import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.File;

public class PoiReadExcel {

public static void main(String[] args) {

// 引入需要解析的文件
File file = new File("e:/poi.xls");
try {
// 创建Excel 读取文件内容
HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
/**
* 第一种方式读取Sheet页
*/
// HSSFSheet sheet = workbook.getSheet("Sheet0");
/**
* 第二种方式读取Sheet页
*/
HSSFSheet sheet = workbook.getSheetAt(0);
int firstRowNum = 0;// 起始行第0行
int lasrRowNum = sheet.getLastRowNum();// 一直读到最后一行
for (int i = 0; i < lasrRowNum; i++) {
HSSFRow row = sheet.getRow(i);
// 获取当前最后单元格列号
int lastCellNum = row.getLastCellNum();
for (int j = 0; j < lastCellNum; j++) {
HSSFCell cell = row.getCell(j);
String value = cell.getStringCellValue();// 注意! 如果Excel 里面的值是String 那么getStringCellValue 如果是其他类型 则需要修改
System.out.print(value + " ");
}
System.out.println();
}

} catch (Exception e) {
e.printStackTrace();
}
}
}

以上支持97-2003版本的

接下来就是高版本的Excel 讲解

引入poi额外包

<!-- poi高版本额外包 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-examples</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-excelant</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.9</version>
</dependency>

导出

package com.excel.demo.poi2;

import org.apache.commons.io.FileUtils;
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.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileOutputStream;

public class PoiCreateExcel {

public static void main(String[] args) {
// 创建表头
String[] title = {"id","name","sex"};
//创建Excel工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
//创建一个工作表shheet
Sheet sheet = workbook.createSheet();
//创建第一行
Row row = sheet.createRow(0);
Cell cell = null;
// 插入第一行
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
}
// 追加数据
for (int i = 1; i < 10; i++) {// 这里的int 起始是1 也就是第二行开始
Row nexTrow = sheet.createRow(i);
Cell cell2 = nexTrow.createCell(0);
cell2.setCellValue("a"+i);
cell2 = nexTrow.createCell(1);
cell2.setCellValue("user");
cell2 = nexTrow.createCell(2);
cell2.setCellValue("男");
}
// 创建一个文件
File file = new File("e:/poi.xlsx");// 这里可以修改成高版本的
try {
file.createNewFile();
// 将内容存盘
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);

stream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!