Java读写Excel的方法
有三种方式:
- POI
- JXL
- FASTEXCEL
POI
是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office 格式档案读和写的功能。
HSSF 是Horrible SpreedSheet Format的缩写,也即“讨厌的电子表格格式”。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。
需要注意的是HSSF只能读写Microsoft Excel格式的档案,即2003~2007的Excel版本;要想读取2007以上版本的档案,就需要使用XSSF了。
当然POI还可以对不同的word文档进行操作,还有ppt、visio也可以读写。
API类 | 目标类型 |
---|---|
HSSF | Microsoft Excel格式的档案 |
XSSF | Microsoft Excel OOXML格式的档案 |
HWPF | Microsoft Word格式的档案 |
HSLF | Microsoft PowerPoint格式的档案 |
HDGF | Microsoft Visio格式的档案 |
JXL
Java Excel是一个开源的源码项目,可以读、写、修改Excel文件。包括常见的格式的设置:字体、颜色、背景、合并单元格等等。
POI | JXL |
---|---|
效率高 | 效率低 |
操作相对复杂 | 操作简单 |
支持公式、宏、图像图表,一些企业应用上会非常实用 | 部分支持 |
能够修饰单元格属性 | 能,格式支持不如POI强大 |
支持字体、数字、日期操作 | 支持字体、数字、日期操作 |
FastExcel
FastExcel是一个采用纯Java开发的excel文件读写组件,支持Excel97~2003文件格式。
FastExcel只能读写单元格的字符信息,而其它的属性如颜色、字体等就不支持了,因此FastExcel只需很小的内存。
读写PDF
通过iText不仅可以生成PDF或rtf文档,而且还可以将XML、Html文件转化为PDF。
下载iText.jar文件后,只需要在系统的classpath中加入iText.jar的路径,在程序中就可以使用iText类库了。
JXL的使用
写Excel文档
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import java.io.File;
public class JXLDemo {
public static void main(String[] args) {
//创建Excel文件
File file=new File("e:/excel/jxl_test.xls");
try {
System.out.println(file.exists());
file.getParentFile().mkdirs();
file.createNewFile();
//创建工作薄
WritableWorkbook workbook= Workbook.createWorkbook(file);
//创建Sheet
WritableSheet sheet=workbook.createSheet("sheet1",0);
Label label=null;
//第一行设置表头
String [] title={"id","name","sex"};
for(int i=0;i<title.length;i++){
label=new Label(i,0,title[i]);//列,行,列值
sheet.addCell(label);
}
//第二行开始追加数据
for(int i=1;i<10;i++){
label=new Label(0,i,"a"+i);
sheet.addCell(label);
label=new Label(1,i,"user"+i);
sheet.addCell(label);
label=new Label(2,i,"男");
sheet.addCell(label);
}
//写入文件
workbook.write();
workbook.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
运行效果
读取Excel
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import java.io.File;
public class JXLReadDemo {
public static void main(String[] args) {
try {
//创建workbook
Workbook workbook = Workbook.getWorkbook(new File("e:/excel/jxl_test.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();
}
}
}
运行效果
id name sex
a1 user1 男
a2 user2 男
a3 user3 男
a4 user4 男
a5 user5 男
a6 user6 男
a7 user7 男
a8 user8 男
a9 user9 男
POI使用
写入Excel
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.10.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.2</version>
</dependency>
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;
import java.io.IOException;
public class POIDemo {
public static void main(String[] args) {
//创建Excel工作薄
HSSFWorkbook workbook=new HSSFWorkbook();
//创建一个工作表sheet
HSSFSheet sheet=workbook.createSheet();
//创建第一行表头
HSSFRow row=sheet.createRow(0);
//定义表头
String [] title={"id","name","sex"};
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++){
HSSFRow nextRow=sheet.createRow(i);
HSSFCell cell2=nextRow.createCell(0);
cell2.setCellValue("a"+i);
cell2=nextRow.createCell(1);
cell2.setCellValue("user"+i);
cell2=nextRow.createCell(2);
cell2.setCellValue("男");
}
//创建文件
File file=new File("e:/excel/poi_test.xls");
file.getParentFile().mkdirs();
try {
file.createNewFile();
//数据存盘
FileOutputStream stream= FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行效果
读取Excel
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;
import java.io.IOException;
public class POIReadExcel {
public static void main(String[] args) {
//需要解析的Excel文件
File file=new File("e:/excel/poi_test.xls");
try {
//创建Excel,读取文件内容
HSSFWorkbook workbook=new HSSFWorkbook(FileUtils.openInputStream(file));
//获取Sheet方式一
HSSFSheet sheet=workbook.getSheet("Sheet0");
//获取sheet方式二 下标
sheet=workbook.getSheetAt(0);
//读取第一行
int firstRowNum=0;
int lastRowNum=sheet.getLastRowNum();
for(int i=0;i<=lastRowNum;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();
System.out.print(value+" ");
}
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
运行效果
id name sex
a1 user1 男
a2 user2 男
a3 user3 男
a4 user4 男
a5 user5 男
a6 user6 男
a7 user7 男
a8 user8 男
a9 user9 男
创建高版本的Excel
我们还需要导入
只需要再在创建低版本的Excel文档的代码上做下改动,将HSSF改为XSSF就可以,最后再修改下文件名的后缀为.xlsx。
public class POICreateXlsx {
public static void main(String[] args) {
//创建Excel工作薄
XSSFWorkbook workbook=new XSSFWorkbook();
//创建一个工作表sheet
XSSFSheet sheet=workbook.createSheet();
//创建第一行表头
XSSFRow row=sheet.createRow(0);
//定义表头
String [] title={"id","name","sex"};
XSSFCell 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++){
XSSFRow nextRow=sheet.createRow(i);
XSSFCell cell2=nextRow.createCell(0);
cell2.setCellValue("a"+i);
cell2=nextRow.createCell(1);
cell2.setCellValue("user"+i);
cell2=nextRow.createCell(2);
cell2.setCellValue("男");
}
//创建文件
File file=new File("e:/excel/poi_test.xlsx");
file.getParentFile().mkdirs();
try {
file.createNewFile();
//数据存盘
FileOutputStream stream= FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在实际使用中,我们并不知道用户机器装的是高版本Excel,还是低版本Excel,为了兼容性,我们通常使用XSSF* 来创建Excel文档,最后写入文件时候,文件的名称起低版本的后缀“xls”,这样客户不论是2007(包括)以前还是2007以后(不包括),都可以打开文档了。