解决Excel文件读取遇到值为null单元格会自动跳过的情况

本文介绍了两种解决Java在读取Excel文件时遇到null单元格自动跳过的方法,包括使用Excel4J库和Apache POI-OOXML库的处理策略。

第一种方法:使用Excel4J依赖

<dependency>
    <groupId>com.github.crab2died</groupId>
    <artifactId>Excel4J</artifactId>
    <version>3.0.0</version>
</dependency>
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

@Slf4j
public class demo {

    public static void main(String[] args){
        String filePath="F:\\cs.xlsx";
        String sheetName="Sheet1";
        List<List<String>> list=getExcelData(filePath,sheetName);
        System.out.println(list.size());
    }

    private static List<List<String>> getExcelData(String filePath,String sheetName){
        List<List<String>> list=new ArrayList<>();
        FileInputStream fileInputStream=null;
        try {
            fileInputStream = new FileInputStream(filePath);
            XSSFWorkbook sheets = new XSSFWorkbook(fileInputStream);
            //获取当前sheet
            XSSFSheet sheet = sheets.getSheet(sheetName);
            //获取当前sheet的行数
            int rows = sheet.getPhysicalNumberOfRows();
            for(int i=1;i<rows;i++){
                List<String> stringList=new ArrayList<>();
                //获取第几行
                XSSFRow row = sheet.getRow(i);
                //获取当前行的最后一个单元格的位置,从0开始
                int columns = row.getLastCellNum();
                for(int j=0;j<columns;j++){
                    if(row.getCell(j)==null||"".equals(row.getCell(j).toString())){//单元格不存在值
                        stringList.add("");
                    }else {//单元格存在值
                        stringList.add(row.getCell(j).toString());
                    }
                }
                list.add(stringList);
            }
        } catch (Exception e) {
            log.error("读取excel文件出现异常:",e);
        }finally {
            try{
                if(fileInputStream!=null){
                    fileInputStream.close();
                }
            }catch (Exception e){
                log.error("关闭文件流出现了异常:",e);
            }
        }
        return list;
    }
}

第二种:使用apache poi-ooxml依赖

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

public class demo {

    public static void main(String[] args){
        String filePath="F:\\cs.xlsx";
        List<List<String>> list=getExcelData(filePath);
        System.out.println(list.toString());
        System.out.println(list.size());
    }

    private static List<List<String>> getExcelData(String filePath){
        List<List<String>> list=new ArrayList<>();
        FileInputStream fileInputStream=null;
        try {
            fileInputStream = new FileInputStream(filePath);

            //获取excel文件流
            Workbook workbook = WorkbookFactory.create(fileInputStream);
            //获取sheet
            Sheet sheet = workbook.getSheetAt(0);
            //获取当前sheet的行数
            int rows = sheet.getPhysicalNumberOfRows();
            for(int i=1;i<rows;i++){
                List<String> stringList=new ArrayList<>();
                //获取第几行
                Row row = sheet.getRow(i);
                //获取当前行的最后一个单元格的位置,从0开始
                int columns = row.getLastCellNum();
                for(int j=0;j<columns;j++){
                    if(row.getCell(j)==null||"".equals(row.getCell(j).toString())){//单元格不存在值
                        stringList.add("");
                    }else {//单元格存在值
                        stringList.add(row.getCell(j).toString());
                    }
                }
                list.add(stringList);
            }
        } catch (Exception e) {
            System.out.println("读取excel文件出现异常:"+e);
        }finally {
            try{
                if(fileInputStream!=null){
                    fileInputStream.close();
                }
            }catch (Exception e){
                System.out.println("关闭文件流出现了异常:"+e);
            }
        }
        return list;
    }
}
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值