pom依赖 导入poi依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
工具类,里面也有main方法
注意:表格的列值,不同有的是整数,有的日期,有的是字符串‘
使用 row.getCell(0).setCellType(CellType.NUMERIC);
进行列格式设置
setCellType 自己点进去看类型把
package com.sxjlrj.common.util;
import java.io.File;
import java.io.FileInputStream;
import java.math.BigDecimal;
import java.util.*;
import com.sxjlrj.manager.censusManager.model.DtStatisticBusiness;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ExcelUtil {
public static void main(String[] args) {
File file = new File("C:\\Users\\gaoyuan\\Desktop\\2017年太原(1).xls");
// File file = new File("E:/2.xls");
try {
List<DtStatisticBusiness> list = importExcel(file);
} catch (Exception e) {
e.printStackTrace();
}
}
public static List<DtStatisticBusiness> importExcel(File file) throws Exception {
Workbook wb = null;
String fileName = file.getName();// 读取上传文件(excel)的名字,含后缀后
// 根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象
Iterator<Sheet> sheets = null;
List<DtStatisticBusiness> returnlist = new ArrayList<DtStatisticBusiness>();
try {
if (fileName.endsWith("xls")) {
wb = new HSSFWorkbook(new FileInputStream(file));
sheets = wb.iterator();
} else if (fileName.endsWith("xlsx")) {
wb = new XSSFWorkbook(new FileInputStream(file));
sheets = wb.iterator();
}
if (sheets == null) {
throw new Exception("excel中不含有sheet工作表");
}
// 遍历excel里每个sheet的数据。
while (sheets.hasNext()) {
Sheet sheet = sheets.next();
String sheetName = sheet.getSheetName();
//读Sheet2的数据
if(sheetName.equals("2020")){
returnlist =getCellValue(sheet);
}
}
} catch (Exception ex) {
throw ex;
} finally {
if (wb != null) wb.close();
}
return returnlist;
}
// 获取每一个Sheet工作表中的数。
private static List<DtStatisticBusiness> getCellValue(Sheet sheet) {
List<DtStatisticBusiness> list = new ArrayList<DtStatisticBusiness>();
// sheet.getPhysicalNumberOfRows():获取的是物理行数,也就是不包括那些空行(隔行)的情况
for (int i = (sheet.getFirstRowNum()+1); i < sheet.getPhysicalNumberOfRows(); i++) {
// 获得第i行对象
Row row = sheet.getRow(i);
if (row == null) {
continue;
} else {
// getLastCellNum:获取列数(比最后一列列标大1)
// 通常导入的excel是符合需求规范的,这里因为我们准备的excel列数是7列,如果小于7列说明传入的excel文件有问题。
if (row.getLastCellNum() < 4) {
continue;
}
//int j = row.getFirstCellNum();// 获取第i行第一个单元格的下标
// 第一列=日期
//判断头部
if (row.getCell(0).getCellTypeEnum().equals(CellType.STRING)){
continue;
}
//封装数据
DtStatisticBusiness dtStatisticBusiness = new DtStatisticBusiness();
row.getCell(0).setCellType(CellType.NUMERIC);
//row.getCell(j).setCellType(CellType.STRING);
Date dateCellValue = row.getCell(0).getDateCellValue();
if (StringUtil.isEmpty(dateCellValue)||dateCellValue.equals("总计")||dateCellValue.equals("日期")) {
continue;
}
dtStatisticBusiness.setReportDate(dateCellValue);
//map.put("schoolName", schoolName);
//第二列=运输起架次
row.getCell(1).setCellType(CellType.STRING);
String transportCell = row.getCell(1).getStringCellValue();
if (StringUtil.isEmpty(transportCell)) {
continue;
}
dtStatisticBusiness.setTransportPre(new BigDecimal(transportCell));
dtStatisticBusiness.setTransportRev(new BigDecimal(transportCell));
//第三列=旅客吞吐量
row.getCell(2).setCellType(CellType.STRING);
String passengerCell = row.getCell(2).getStringCellValue();
if (StringUtil.isEmpty(passengerCell)) {
continue;
}
BigDecimal passengerDivide = new BigDecimal(passengerCell).divide(new BigDecimal(10000));
dtStatisticBusiness.setPassengerPre(passengerDivide);
dtStatisticBusiness.setPassengerRev(passengerDivide);
//第四列=货邮吞吐量
row.getCell(3).setCellType(CellType.STRING);
String cargoCell = row.getCell(3).getStringCellValue();
if (StringUtil.isEmpty(cargoCell)) {
continue;
}
BigDecimal cargoDivide = new BigDecimal(cargoCell).divide(new BigDecimal(1000));
dtStatisticBusiness.setCargoRev(cargoDivide);
dtStatisticBusiness.setCargoPre(cargoDivide);
list.add(dtStatisticBusiness);
// System.out.println("日期="+dateCellValue+"运输起架次="+transportCell+"旅客吞吐量="+passengerCell+"货邮吞吐量="+cargoCell);
/* //map.put("name", name);
Cell cell = row.getCell(j++);// 学号(在excel中,学号可能是纯数字,也可能是字母在数字)
if (cell.getCellTypeEnum().equals(CellType.STRING)) {// 如果是字符串,直接获取值
map.put("sn", cell.getStringCellValue());
} else if (cell.getCellTypeEnum().equals(CellType.NUMERIC)) {
// 如果excel中学号是纯数字,获取的值是数值类型,再toPlainString()转为字符类型,因为数据库中学号字段需要是字符类型。
map.put("sn", new BigDecimal(cell.getNumericCellValue()).toPlainString());
}
cell = row.getCell(j++);// 年级(数据库中,年级是int类型,所以这里我们转换为int)
if (cell.getCellTypeEnum().equals(CellType.STRING)) {
try {
String gradeStr = cell.getStringCellValue();
//
int grade = Integer.parseInt(gradeStr);
map.put("grade", grade);
} catch (Exception e) {
continue;
}
} else if (cell.getCellTypeEnum().equals(CellType.NUMERIC)) {
map.put("grade", (int) cell.getNumericCellValue());
}
cell = row.getCell(j++);// 班级(数据库中,年级是int类型,所以这里我们转换为int)
if (cell.getCellTypeEnum().equals(CellType.STRING)) {
try {
String klassStr = cell.getStringCellValue();
int klass = Integer.parseInt(klassStr);
map.put("klass", klass);
} catch (Exception e) {
continue;
}
} else {
map.put("klass", (int) cell.getNumericCellValue());
}
String genderStr = row.getCell(j++).getStringCellValue();
int gender = "男".equals(genderStr) ? 1 : "女".equals(genderStr) ? 0 : 2;
map.put("gender", gender);
if (j <= row.getLastCellNum()) {
cell = row.getCell(j++);// 手机号
if (cell.getCellTypeEnum().equals(CellType.STRING))
map.put("phone", cell.getStringCellValue());
else if (cell.getCellTypeEnum().equals(CellType.NUMERIC)) map.put("phone",
new BigDecimal(cell.getNumericCellValue()).toPlainString());
}
list.add(map);*/
}
}
return list;
}
}