说明:
● 支持对xls和xlsx的内容读取;
● 默认表格不存在合并单元格;
● 只读取Excel中的文字内容,不读取图片;
● 涉及以下依赖
<!-- 读取Excel文件内容 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.16</version>
</dependency>
代码
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;
import org.apache.poi.ss.usermodel.CellType;
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;
public class ReadExcelUtils {
public static void main(String[] args) throws Exception {
String excelPath = "E:\\Somthing\\100.xls";
readExcel(excelPath);
}
public static void readExcel(String path) throws Exception {
// 设置基本参数
int sheetNum = 0;// 读取表格第几页 ->0才是第一页
// 创建字节输入流
InputStream inputStream = new FileInputStream(path);
// 判断Excel版本
String excelType = path.substring(path.lastIndexOf(".")+1);
if (excelType.equals("xlsx")) {
// Excel 2010 以及 更高版本
// 读取xlsx文件内容
readXlsx(path, sheetNum);
} else {
// Excel 2007 以及更低版本
// 读取xls文件内容
readXls(path, sheetNum);
}
// 关闭流
inputStream.close();
}
// 读取xls文件内容
public static void readXls(String path, int num) throws Exception {
InputStream in = new FileInputStream(path);
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(in);
// 获取当前页
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(num);
if (hssfSheet != null) {
// 处理当前页,并处理每一行
for (int rowNum = 0; rowNum < hssfSheet.getLastRowNum() + 1; rowNum++) {
// 获取行数据
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
// 第一个(最小的)列号
int minColIX = hssfRow.getFirstCellNum();
// 最后一个(最大的)列号
int maxColIX = hssfRow.getLastCellNum();
System.out.println("------接下来展示第" + rowNum + "行的数据------");
// 遍历,控制台打印解析到的数据
for (int colIX = minColIX; colIX < maxColIX; colIX++) {
// 获取单元格
HSSFCell cell = hssfRow.getCell(colIX);
if (cell != null) {
// 直接输出结果
System.out.println("--第" + colIX + "列数据=" + cell.toString());
// 对单元格类型做判断》》若数字类型,内容出现了不想要的.00,会去掉末尾的.00。例如56.00变成56
System.out.println("--第" + colIX + "列数据=" + setCellContent(cell.getCellTypeEnum(), cell.toString()));
}
}
}
}
hssfWorkbook.close();
in.close();
}
// 根据单元格属性赋值--》在单元格为整数的情况下,去掉多余的.0
public static String setCellContent(CellType cellTypeEnum, String content) {
switch (cellTypeEnum) {
case NUMERIC:
// 数字类型的单元格的值 --> 若content = 56.00
Integer decimal = Integer.valueOf(content.split("\\.")[1]);
if (decimal == 0) {
content = content.split("\\.")[0]; // content = 56
}
break;
default:
break;
}
return content;
}
// 读取xlsx文件内容
public static void readXlsx(String path, int pageNum) throws Exception {
// 读取Excel的准备
InputStream in = new FileInputStream(path);
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(in);
// 获取当前页
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(pageNum);
if (xssfSheet != null) {
// 处理当前页,并处理每一行
for (int rowNum = 0; rowNum < xssfSheet.getLastRowNum() + 1; rowNum++) {
// 获取行数据
XSSFRow xssfRow = xssfSheet.getRow(rowNum);
// 第一个(最小的)列号
int minColIX = xssfRow.getFirstCellNum();
// 最后一个(最大的)列号
int maxColIX = xssfRow.getLastCellNum();
System.out.println("------接下来展示第" + rowNum + "行的数据------");
// 遍历该行,处理该行数据
for (int colIX = minColIX; colIX < maxColIX; colIX++) {
XSSFCell cell = xssfRow.getCell(colIX);// 获取单元格
if (cell != null) {
// 直接输出结果
System.out.println("--第" + colIX + "列数据=" + cell.toString());
// 对单元格类型做判断》》若数字类型,内容出现了不想要的.00,会去掉末尾的.00。例如56.00变成56
System.out.println("--第" + colIX + "列数据=" + setCellContent(cell.getCellTypeEnum(), cell.toString()));
}
}
}
}
in.close();
xssfWorkbook.close();
}
}