需要先倒入POI的jar
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8</version>
</dependency>


public String exportCharge(MultipartHttpServletRequest request) {
try {
//得到上传的文件
MultipartFile fileFile = request.getFile("file");
//转换成输入流
InputStream in = fileFile.getInputStream();
XSSFWorkbook readWb = new XSSFWorkbook(in);
//遍历该表格中所有的工作表,i表示工作表的数量 getNumberOfSheets表示工作表的总数

XSSFSheet sheet = readWb.getSheetAt(0);
//循环行Row
for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
System.out.println("当前插入第"+rowNum);
XSSFRow hssfRow = sheet.getRow(rowNum);
AllPhone allPhone=new AllPhone();
if (hssfRow != null) {
for (int colNum = 0; colNum < hssfRow.getPhysicalNumberOfCells(); colNum++) {
String tmp = hssfRow.getCell(colNum).toString();
if (colNum == 0) {
int begin = tmp.indexOf(".");
} else if (colNum == 1) {
allPhone.setStage(tmp);
}else if (colNum == 2) {

}else if (colNum == 3) {
allPhone.setCardtype(tmp);
}else if (colNum == 4) {


}else if (colNum == 5) {
if(StringUtil.isNotEmpty(tmp)){
allPhone.setPostcode(tmp);
}
}
}
}
}

} catch (Exception e) {
e.printStackTrace();
}
return "ok";
}


方法二EasyExcel(2024年阿里停止维护,取而代之更高效的FastExcel Git地址https://github.com/CodePhiliaX/fastexcel https://idev.cn/fastexcel/zh-CN/docs)

导包:
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.1.1</version>
</dependency>

Controller
EasyExcel.read(file.getInputStream(), GradeCoverDataBean.class,
        new GradeCoverDataListener(gradeInfoMapper,matchRegisterMapper)).sheet().doRead();
实体类:
名字就是  GradeCoverDataBean  字段就是excel一一对应

package com.erp.match.common.data;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.erp.match.common.enums.ExcelValueType;
import lombok.Data;

/**
 * 功能描述:团队成绩导入
 *
 * @Author hsy
 * @createDate 2022/1/14
 */
@Data
public class TeamGradeCoverDataBean {
    @ExcelProperty(value = "赛事名称",index = 1)
    private String matchName;
    @ExcelProperty(value = "赛事编码",index = 2)
    private String matchCode;
    @ExcelProperty(value = "组别",index = 3)
    private String groupName;
    @ExcelProperty(value = "队伍名称",index = 4)
    private String teamName;
    @ExcelProperty(value = "队伍码",index = 5)
    private String teamCode;
    @ExcelProperty(value = "领队姓名",index = 6)
    private String leaderName;
    @ExcelProperty(value = "领队身份证号",index = 7)
    private String leaderIdNumber;
    @ExcelProperty(value = "成绩",index = 8)
    private String teamGrade;
    @ExcelProperty(value = "名次",index = 9)
    private String teamRanking;
    @ExcelIgnore
    private String errMessage;
}


然后就是监听器:GradeCoverDataListener
package com.erp.match.service.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.erp.match.common.data.TeamGradeCoverDataBean;
import com.erp.match.dal.entity.MatchTeam;
import com.erp.match.manager.mapper.team.TeamGradeMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.List;

import static java.util.Objects.isNull;

/**
 * 功能描述:
 *
 * @Author hsy
 * @createDate 2022/1/14
 */
@Slf4j
public class TeamGrageCoverDataListener extends AnalysisEventListener<TeamGradeCoverDataBean> {
    /**
     * 每隔10条存数据库,然后清理list,方便内存回收
     */
    private static final int BATCH_COUNT = 10;

    private List<MatchTeam> matchTeams = new ArrayList<>(BATCH_COUNT);

    private List<TeamGradeCoverDataBean> errorTeams = new ArrayList<>();

    private TeamGradeMapper teamGradeMapper;

    public TeamGrageCoverDataListener(TeamGradeMapper teamGradeMapper) {
        this.teamGradeMapper = teamGradeMapper;
    }

    @Override
    public void invoke(TeamGradeCoverDataBean teamGradeCoverDataBean, AnalysisContext analysisContext) {
        log.info("导入一条数据:{}",teamGradeCoverDataBean.toString());
        // 参数检验
        String msg=checkTeamGradeBeanValid(teamGradeCoverDataBean);
        if(StringUtils.isEmpty(msg)){
            QueryWrapper<MatchTeam> queryWrapper = new QueryWrapper<>();
            queryWrapper.eq("team_code", teamGradeCoverDataBean.getTeamCode());
            MatchTeam team = teamGradeMapper.selectOne(queryWrapper);
            if (isNull(team)) {
                teamGradeCoverDataBean.setErrMessage("队伍编码不存在");
                errorTeams.add(teamGradeCoverDataBean);
            }else {
                team.setTeamGrade(teamGradeCoverDataBean.getTeamGrade());
                team.setTeamRanking(Integer.valueOf(teamGradeCoverDataBean.getTeamRanking()));
                teamGradeMapper.updateById(team);
            }
        }else{
            teamGradeCoverDataBean.setErrMessage(msg);
            errorTeams.add(teamGradeCoverDataBean);
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        log.info("导入结束!");
        log.info("错误条数:{}",errorTeams.size());
        errorTeams.clear();

    }

    private String checkTeamGradeBeanValid(TeamGradeCoverDataBean teamGradeCoverDataBean) {
        if(StringUtils.isBlank(teamGradeCoverDataBean.getTeamCode())){
            return "队伍码为空";
        }
        if(StringUtils.isBlank(teamGradeCoverDataBean.getTeamRanking())){
            return "名次为空";
        }
        if(StringUtils.isBlank(teamGradeCoverDataBean.getTeamGrade())){
            return "成绩为空";
        }
        return null;
    }
}

}
View Code

方法3:EEC(git地址:https://toscode.mulanos.cn/wiidown/eec)
<dependency>
    <groupId>org.ttzero</groupId>
    <artifactId>eec</artifactId>
    <version>${eec.version}</version>
</dependency>