POI
HSSFWorkbook
是操作03版本的
XSSFWorkbook
是操作07版本的
SXSSFWorkbook
是操作07版本的升级版
POI的读写规则是先读取行,再通过列数获取单元格
操作Excel
<!--xLs(03)-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<!--xlsx(07)-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<!--日期格式化工具-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFFormulaEvaluator;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @author :mahe666
* @description:POI读取Excel工具类
* @date :Created in 2021/9/5 10:56
*/
public class POIReadUtil {
/**
* 功能描述:
* 第一个参数是读取路径和读取文件的字符串的组合
* 第二个参数是工作表的表名(Excel表格下面的选择器)
* 第三个参数是从第几行开始,按照excel表格的行数写
*
* @param:pathAndFilename,sheetName,rowStartNum
* @return:List<List<String>>
*/
public static List<List<String>> getExcelInfo(String pathAndFilename, String sheetName, Integer rowStartNum) throws IOException {
Workbook workbook;
FormulaEvaluator formulaEvaluator;
//输入流
FileInputStream fileInputStream = new FileInputStream(pathAndFilename);
if (pathAndFilename.contains(".xlsx")) {
//拿到xlsx工作簿
workbook = new XSSFWorkbook(fileInputStream);
formulaEvaluator = new XSSFFormulaEvaluator((XSSFWorkbook) workbook);
} else if (pathAndFilename.contains(".xls")) {
//拿到xls工作簿
workbook = new HSSFWorkbook(fileInputStream);
formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);
} else {
System.out.println("该文件不是Excel表格,请重试");
return null;
}
//拿到工作表
Sheet sheet = workbook.getSheet(sheetName);
rowStartNum -= 1;
//获取总行数
int rowCount = sheet.getPhysicalNumberOfRows();
//读取每一行
List<List<String>> totalList = new ArrayList<>();
for (int rowNum = rowStartNum; rowNum < rowCount; rowNum++) {
Row row = sheet.getRow(rowNum);
if (row != null) {
List<String> dataList = new ArrayList<>();
//获取单元格个数
int cellCount = row.getPhysicalNumberOfCells();
for (int cellNum = 0; cellNum < cellCount; cellNum++) {
//获取单元格
Cell cell = row.getCell(cellNum);
if (cell != null) {
//获取单元格格式类型
int cellType = cell.getCellType();
//初始化一个变量
String cellValue = "";
//匹配单元格的数据类型
switch (cellType) {
case HSSFCell.CELL_TYPE_NUMERIC: //如果是数字类型(日期 或 普通数字)
if (HSSFDateUtil.isCellDateFormatted(cell)) { //判断是否是一个日期
Date date = cell.getDateCellValue();
cellValue = new DateTime(date).toString("yyyy-MM-dd HH:mm:ss");
} else { //如果是数字,防止数字过长
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cellValue = cell.toString();
}
break;
case HSSFCell.CELL_TYPE_STRING: //如果是字符串类型
cellValue = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_FORMULA:
String formula = cell.getCellFormula(); //获取公式
CellValue evaluate = formulaEvaluator.evaluate(cell);
String value = evaluate.formatAsString(); //通过公式计算出的结果
/*
在这里需要选择需要的值(公式或者计算的值)
*/
cellValue = value;
break;
case HSSFCell.CELL_TYPE_BLANK: //如果是空
break;
case HSSFCell.CELL_TYPE_BOOLEAN: //如果是布尔类型
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case HSSFCell.CELL_TYPE_ERROR: //如果数据类型错误
System.out.println("数据类型错误");
break;
default:
System.out.println("匹配单元格的数据类型时,出现意料之外的错误");
}
dataList.add(cellValue);
}
}
totalList.add(dataList);
}
}
return totalList;
}
}
操作Word
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</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.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.9</version>
</dependency>
相关博客: