1. 绪论
- POI
Apache POI是Apache软件基金会的开放源码函数库,POI提供API给Java程序对Microsoft Office格式档案读写功能。
- HSSF 读写Microsoft Excel格式档案的功能。
- XSSF 读写Microsoft Excel OOXML格式档案的管理。
- HWPF 读写Microsoft PowerPoint格式档案的功能。
- HSLF 读写Microsoft PowerPoint格式档案的功能。
- HDGF 读写Microsoft Visio格式档案的功能。
- JXL
开放源码文件。POI效率更高,操作相对复杂,JXL操作更简单。
- FASTEXCEL:纯Java开发的excel文件读写组件,支持Excel 97-2003文件格式;占用内存小。
2. JXL篇之程序范例
2.1 JXL 创建低版本Excel文件
- 程序代码
package excelJxl;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import java.io.File;
public class JxlExcelCre {
/**
* JXL 创建Excel文件
* @author yangtingting
* @date 2019/07/29
*/
public static void main(String[] args) throws Exception{
//创建Excel文件
File file=new File("D:/jxl_test.xls");
//创建文件
file.createNewFile();
//创建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(file);
//创建sheet
WritableSheet sheet=workbook.createSheet("sheet1",0);
//添加数据
String[] title={"id","name","sex"};
Label label=null;
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"+1);
sheet.addCell(label);
label=new Label(1,i,"user"+1);
sheet.addCell(label);
label=new Label(2,i,"男"+1);
sheet.addCell(label);
}
workbook.write();
workbook.close();
}
}
- 程序解读:
- JXL的每个单元格都是通过Label写入的
- JXL没有行的概念,通过“坐标”确定行和列
2.2 JXL 读取低版本Excel文件
- 程序代码
package excelJxl;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import java.io.File;
public class JxlExcelRead {
/**
* JXL 读取Excel文件
* @author yangtingting
* @date 2019/07/29
*/
public static void main(String[] args) throws Exception {
//创建workbook
Workbook workbook=Workbook.getWorkbook(new File("D:/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();
}
}
3. POI篇之程序范例
3.1 POI 创建低版本Excel文件
- 程序代码:
package excelPOI;
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 org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.FileOutputStream;
public class POIExcelCre {
/**
* POI 创建Excel文件
* @author yangtingting
* @date 2019/07/29
*/
public static void main(String[] args) throws Exception {
//创建Excel文件薄
HSSFWorkbook workbook=new HSSFWorkbook();
//创建工作表sheeet
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("D:/poi_test.xls");
file.createNewFile();
FileOutputStream stream=FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
}
}
3.2 POI 读取低版本Excel文件
- 程序代码
package excelPOI;
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 POIExcelRead {
/**
* POI 读取Excel文件
* @author yangtingting
* @date 2019/07/29
*/
public static void main(String[] args) throws Exception {
//创建Excel,读取文件内容
File file=new File("D:/poi_test.xls");
HSSFWorkbook workbook=new HSSFWorkbook(FileUtils.openInputStream(file));
//两种方式读取工作表
// HSSFSheet sheet=workbook.getSheet("Sheet0");
HSSFSheet sheet=workbook.getSheetAt(0);
//获取sheet中最后一行行号
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();
}
}
}
3.3 POI -XSSF创建高版本Excel文件
实际上,高版本的Excel文件只需更改响应jar包和个别方法名即可,直接附上代码吧。
package excelPOI;
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 POIEcxelCreHigh {
/**
* POI 创建高版本Excel文件
* @author yangtingting
* @date 2019/07/29
*/
public static void main(String[] args) throws Exception {
//创建Excel文件薄
XSSFWorkbook workbook=new XSSFWorkbook();
//创建工作表sheeet
Sheet sheet=workbook.createSheet();
//创建第一行
Row row=sheet.createRow(0);
String[] title={"id","name","sex"};
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++){
Row nextrow=sheet.createRow(i);
Cell 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("D:/poi_test.xlsx");
file.createNewFile();
FileOutputStream stream= FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
}
}
3.4 POI -XSSF读取高版本Excel文件
代码:
package excelPOI;
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;
public class POIExcelReadHigh {
/**
* POI 读取高版本Excel文件
* @author yangtingting
* @date 2019/07/29
*/
public static void main(String[] args) throws Exception {
//创建Excel,读取文件内容
File file=new File("D:/poi_test.xlsx");
XSSFWorkbook workbook=new XSSFWorkbook(FileUtils.openInputStream(file));
//两种方式读取工作表
// Sheet sheet=workbook.getSheet("Sheet0");
Sheet sheet=workbook.getSheetAt(0);
//获取sheet中最后一行行号
int lastRowNum=sheet.getLastRowNum();
for (int i=0;i<=lastRowNum;i++){
Row row=sheet.getRow(i);
//获取当前行最后单元格列号
int lastCellNum=row.getLastCellNum();
for (int j=0;j<lastCellNum;j++){
Cell cell=row.getCell(j);
String value=cell.getStringCellValue();
System.out.print(value+" ");
}
System.out.println();
}
}
}
注意 :
在读取某些Excel时报错Exception in thread “main” java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell。
处理 :
代码做出相应更改:
代码如下:
for (int j=0;j<lastCellNum;j++){
// Cell cell=row.getCell(j);
DataFormatter formatter=new DataFormatter();
String value=formatter.formatCellValue(row.getCell(j));
System.out.print(value+" ");
}
4. Maven
4.1 低版本Excel创建与读取
<dependencies>
<!-- https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl -->
<dependency>
<groupId>net.sourceforge.jexcelapi</groupId>
<artifactId>jxl</artifactId>
<version>2.6.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
4.2 高版本Excel创建与读取
需要 额外增加 依赖:
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
5. 定制Excel导入模板
5.1 概念
- 利用xml解析技术,确定模板样式
- 确定模板列
- 定义标题(合并单元格)
- 定义列名
- 定义数据区域单元格样式
- 这一部分的学习放在以后,先mark一下。视频链接