如果觉得写得可以 或者太差 就 评论一下或者赞一下呗,多谢支持!!
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi excle 文件 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.14</version>
</dependency>
2.代码:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
*
*/
public class GetDataFromExcel {
/** 总行数 */
private int totalRows = 0;
/** 总列数 */
private int totalCells = 0;
/** 构造方法 */
public GetDataFromExcel(){}
/**
* 读取文件
* @param fileName
* @return
*/
public List<ArrayList<String>> read(String fileName) {
List<ArrayList<String>> dataLst = new ArrayList<ArrayList<String>>();
/** 检查文件名是否为空或者是否是Excel格式的文件 */
if (fileName == null || !fileName.matches("^.+\\.(?i)((xls)|(xlsx))$")) {
return dataLst;
}
boolean isExcel2003 = true;
/** 对文件的合法性进行验证 */
if (fileName.matches("^.+\\.(?i)(xlsx)$")) {
isExcel2003 = false;
}
/** 检查文件是否存在 */
File file = new File(fileName);
if (file == null || !file.exists()) {
return dataLst;
}
try {
/** 调用本类提供的根据流读取的方法 */
dataLst = read(new FileInputStream(file), isExcel2003);
} catch (Exception ex) {
ex.printStackTrace();
}
/** 返回最后读取的结果 */
return dataLst;
}
/**
* 根据流读取Excel文件
* @param inputStream
* @param isExcel2003
* @return
*/
public List<ArrayList<String>> read(InputStream inputStream, boolean isExcel2003) {
List<ArrayList<String>> dataLst = null;
try {
/** 根据版本选择创建Workbook的方式 */
Workbook wb = isExcel2003 ? new HSSFWorkbook(inputStream)
: new XSSFWorkbook(inputStream);
dataLst = read(wb);
} catch (IOException e) {
e.printStackTrace();
}
return dataLst;
}
/**
* 得到总行数
* @return
*/
public int getTotalRows() {
return totalRows;
}
/**
* <li>Description:[得到总列数]</li>*
* @return
*/
public int getTotalCells() {
return totalCells;
}
/**
* 读取数据
* @param wb
* @return
*/
private List<ArrayList<String>> read(Workbook wb) {
List<ArrayList<String>> dataLst = new ArrayList<ArrayList<String>>();
/** 得到第一个shell */
Sheet sheet = wb.getSheetAt(0);
this.totalRows = sheet.getPhysicalNumberOfRows();
if (this.totalRows >= 1 && sheet.getRow(0) != null) {
this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
}
/** 循环Excel的行 */
for (int r = 0; r < this.totalRows; r++) {
Row row = sheet.getRow(r);
if (row == null){
continue;
}
ArrayList<String> rowLst = new ArrayList<String>();
/** 循环Excel的列 */
for (short c = 0; c < this.getTotalCells(); c++) {
Cell cell = row.getCell(c);
String cellValue = "";
if (cell == null) {
rowLst.add(cellValue);
continue;
}
/** 处理数字型的,自动去零 */
if (Cell.CELL_TYPE_NUMERIC == cell.getCellType()) {
/** 在excel里,日期也是数字,在此要进行判断 */
if (HSSFDateUtil.isCellDateFormatted(cell)) {
cellValue = String.valueOf(DateUtil.getExcelDate(cell.getDateCellValue()));
}else{
cellValue = getRightStr(cell.getNumericCellValue() + "");
}
}
/** 处理字符串型 */
else if (Cell.CELL_TYPE_STRING == cell.getCellType()){
cellValue = cell.getStringCellValue();
}
/** 处理布尔型 */
else if (Cell.CELL_TYPE_BOOLEAN == cell.getCellType()) {
cellValue = cell.getBooleanCellValue() + "";
}
/** 其它的,非以上几种数据类型 */
else {
cellValue = cell.toString() + "";
}
rowLst.add(cellValue);
}
dataLst.add(rowLst);
}
return dataLst;
}
/**
* @param sNum
* @return
*/
private String getRightStr(String sNum) {
DecimalFormat decimalFormat = new DecimalFormat("#.000000");
String resultStr = decimalFormat.format(new Double(sNum));
if (resultStr.matches("^[-+]?\\d+\\.[0]+$")) {
resultStr = resultStr.substring(0, resultStr.indexOf("."));
}
return resultStr;
}
public static void main(String[] args) throws Exception {
List<ArrayList<String>> dataLst = new GetDataFromExcel()
.read("d:/123.xls");
for (ArrayList<String> innerLst : dataLst) {
StringBuffer rowData = new StringBuffer();
for (String dataStr : innerLst) {
rowData.append("-->").append(dataStr);
}
if (rowData.length() > 0) {
System.out.println(rowData.deleteCharAt(0).toString());
}
}
}
}
对于 以上 代码 我更喜欢 在项目里把它弄成一个工具类, 然后 给他传入 excel地址, 然后输出一个 list 来使用, 至于里面怎么实现的,没有特殊要求 可以不做过多关注. >.<