一.Excel解析的几种实现方式
1.JXL(较少使用)
2.POI(常用)
问题:The supplied data appears to be in the Office 2007+ XML
参照:https://blog.csdn.net/you23hai45/article/details/70196897
大概:判断文件后缀名是xls,还是xlsx,如果是xls,使用HSSFWorkbook;如果是xlsx,使用XSSFWorkbook
3.FastExcel(基本不用)
二.实例
1.JXL生成导出Excel(先导入jxl的包 )
package com.tiglle.jxl;
import java.io.File;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
public class JxlTestOut{
public static void main(String[] args) {
//创建Excel文件
File file = new File("e:/jxl_excel.xls");
try {
//创建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(file);
//创建sheet页
WritableSheet sheet = workbook.createSheet("sheet名称", 0);
//一格Label代表一格,用列y和行x定位。new Label(列y,行x,"标题0");
Label label0 = new Label(0,0,"标题0");
Label label1 = new Label(1,0,"标题1");
Label label2 = new Label(2,0,"标题2");
sheet.addCell(label0);
sheet.addCell(label1);
sheet.addCell(label2);
//第二行数据
Label label3 = new Label(0,1,"内容0");
Label label4 = new Label(1,1,"内容1");
Label label5 = new Label(2,1,"内容2");
sheet.addCell(label3);
sheet.addCell(label4);
sheet.addCell(label5);
//写入内容
workbook.write();
//关闭流
workbook.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
jxl_excel.xls:
标题0 标题1 标题2
内容0 内容1 内容2
2.JXL解析导入Excel
package com.tiglle.jxl;
import java.io.File;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
public class JxlTestIn {
public static void main(String[] args) {
try {
//指定Excel文件
File file = new File("E://jxl_excel.xls");
//创建WorkBook
Workbook workbook = Workbook.getWorkbook(file);
//获取工作表sheet页(从第0页开始)
Sheet sheet0 = workbook.getSheet(0);
//获取第一页sheet中的数据
//getCell(y,x);
Cell cell00 = sheet0.getCell(0, 0);
System.out.println(cell00.getContents());
Cell cell10 = sheet0.getCell(1, 0);
System.out.println(cell10.getContents());
//关闭流
workbook.close();
} catch (Exception e) {
}
}
}
结果:
标题0
标题1
3.POI生成导出Excle
package com.tiglle.poi;
import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
public class PoiTestOut {
public static void main(String[] args) {
//创建Excel工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个sheet页
HSSFSheet sheet0 = workbook.createSheet("第一页");
//创建第一行标题行,从0开始
HSSFRow row0 = sheet0.createRow(0);
//创建第一行的第一格(第一列)
Cell cell00 = row0.createCell(0);
//设置y0,x0的内容(y,x)
cell00.setCellValue("标题0");
//创建第一行的第二格
Cell cell01 = row0.createCell(1);
//设置y0,x1的内容
cell01.setCellValue("标题1");
//创建第一行的第三格
Cell cell02 = row0.createCell(2);
//设置y0,x2的内容
cell02.setCellValue("标题2");
//创建第二行的内容行
HSSFRow row1 = sheet0.createRow(1);
//第二行第一格
Cell cell10 = row1.createCell(0);
//设置y1,x0的内容
cell10.setCellValue("内容0");
//第二行第二格
Cell cell11 = row1.createCell(1);
//设置y1,x1的内容
cell11.setCellValue("内容1");
//第二行第一格
Cell cell12 = row1.createCell(2);
//设置y1,x2的内容
cell12.setCellValue("内容2");
//创建第二个sheet页..
HSSFSheet sheet1 = workbook.createSheet("第二页");
try {
//创建Excel文件,并将内容写入(如果路径包含不存在的文件夹,必须创建,不然包找不到文件异常)
File file = new File("E://poi_excel.xls");
file.createNewFile();
//通过文件输出流将内容写入文件
FileOutputStream outStream = new FileOutputStream(file);
//将内容写入
workbook.write(outStream);
//关闭流
outStream.close();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.POI解析Excel
package com.tiglle.poi;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
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;
public class PoiTestIn {
public static void main(String[] args) {
try {
//指定一个Excel文件
File file = new File("E://poi_excel.xls");
//创建Excel,读取文件内容
InputStream inputStream = new FileInputStream(file);
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
//获取指定sheet页(两种方式)
//1.通过sheetName获取
//HSSFSheet sheet = workbook.getSheet("第一页");
//2.通过索引(页数)获取(从0开始)
HSSFSheet sheet = workbook.getSheetAt(0);
//获取第一行
HSSFRow row0 = sheet.getRow(0);
//获取第一行的第一格(y,x)
HSSFCell cell00 = row0.getCell(0);
//获取内容
String content = cell00.getStringCellValue();
System.out.println(content);
//获取第二行
HSSFRow row1 = sheet.getRow(1);
//获取第二行的第一格(y,x)
HSSFCell cell10 = row1.getCell(0);
//获取内容
String content1 = cell10.getStringCellValue();
System.out.println(content1);
//获取sheet中最后一行行号
int lastRowNum = sheet.getLastRowNum();
//获取一行最后一格号
int lastCellNum = row1.getLastCellNum();
System.out.println("lastRowNum="+lastRowNum+",lastCellNum="+lastCellNum);
//关闭流
workbook.close();
inputStream.close();
} catch (Exception e) {
}
}
}
5.POI生成和解析高版本的Excel(xlsx后缀结尾)
生出导出:
package com.tiglle.poi;
import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* 生成高版本你的Excel(xlsx后缀结尾)
* 低版本使用的HSSF,高版本使用XSSF
* @author Administrator
*
*/
public class PoiHeightVersionExcelOut {
public static void main(String[] args) {
//创建Excel工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
//创建一个sheet页
XSSFSheet sheet0 = workbook.createSheet("第一页");
//创建第一行标题行,从0开始
XSSFRow row0 = sheet0.createRow(0);
//创建第一行的第一格(第一列)
Cell cell00 = row0.createCell(0);
//设置y0,x0的内容(y,x)
cell00.setCellValue("标题0");
//创建第一行的第二格
Cell cell01 = row0.createCell(1);
//设置y0,x1的内容
cell01.setCellValue("标题1");
//创建第一行的第三格
Cell cell02 = row0.createCell(2);
//设置y0,x2的内容
cell02.setCellValue("标题2");
//创建第二行的内容行
XSSFRow row1 = sheet0.createRow(1);
//第二行第一格
Cell cell10 = row1.createCell(0);
//设置y1,x0的内容
cell10.setCellValue("内容0");
//第二行第二格
Cell cell11 = row1.createCell(1);
//设置y1,x1的内容
cell11.setCellValue("内容1");
//第二行第一格
Cell cell12 = row1.createCell(2);
//设置y1,x2的内容
cell12.setCellValue("内容2");
//创建第二个sheet页..
XSSFSheet sheet1 = workbook.createSheet("第二页1");
try {
//创建Excel文件,并将内容写入(如果路径包含不存在的文件夹,必须创建,不然包找不到文件异常)
File file = new File("E://poi_excel1.xlsx");
file.createNewFile();
//通过文件输出流将内容写入文件
FileOutputStream outStream = new FileOutputStream(file);
//将内容写入
workbook.write(outStream);
//关闭流
outStream.close();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
解析读取
package com.tiglle.poi;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* 解析高版本你的Excel(xlsx后缀结尾)
* 低版本使用的HSSF,高版本使用XSSF
* @author Administrator
*
*/
public class PoiHeightVersionExcelIn {
public static void main(String[] args) {
try {
//指定一个Excel文件
File file = new File("E://poi_excel.xlsx");
//创建Excel,读取文件内容
InputStream inputStream = new FileInputStream(file);
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
//获取指定sheet页(两种方式)
//1.通过sheetName获取
//HSSFSheet sheet = workbook.getSheet("第一页");
//2.通过索引(页数)获取(从0开始)
XSSFSheet sheet = workbook.getSheetAt(0);
//获取第一行
XSSFRow row0 = sheet.getRow(0);
//获取第一行的第一格(y,x)
XSSFCell cell00 = row0.getCell(0);
//获取内容
String content = cell00.getStringCellValue();
System.out.println(content);
//获取第二行
XSSFRow row1 = sheet.getRow(1);
//获取第二行的第一格(y,x)
XSSFCell cell10 = row1.getCell(0);
//获取内容
String content1 = cell10.getStringCellValue();
System.out.println(content1);
//获取sheet中最后一行行号
int lastRowNum = sheet.getLastRowNum();
//获取一行最后一格号
int lastCellNum = row1.getLastCellNum();
System.out.println("lastRowNum="+lastRowNum+",lastCellNum="+lastCellNum);
//关闭流
workbook.close();
inputStream.close();
} catch (Exception e) {
}
}
}
结果:
标题0
内容0
lastRowNum=1,lastCellNum=3