Java 读取Excel文件数据,兼容.xls与.xlsx

本文详细介绍了使用Java读取Excel(XLS和XLSX)的方法,包括如何判断Excel版本、解析文件并获取数据,以及处理单元格格式。通过具体代码示例,展示了如何循环页签、行和列来获取数据,并提供了单元格格式转换的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * @param filePath 文件路径
 * @Description 判断Excel版本
 * @Throws
 * @Return org.apache.poi.ss.usermodel.Workbook
 * @Date 2020-07-23 18:56:29
 * @Author WangKun
 */
public static Workbook readExcel(String filePath) {
    if (filePath == null) {
        return null;
    }
    String extString = filePath.substring(filePath.lastIndexOf("."));
    try {
        InputStream is = new FileInputStream(filePath);
        if (".xls".equals(extString)) {
            return new HSSFWorkbook(is);
        } else if (".xlsx".equals(extString)) {
            return new XSSFWorkbook(is);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
/**
 * @param file
 * @Description 文件解析
 * @Throws
 * @Return void
 * @Date 2020-07-23 18:57:32
 * @Author WangKun
 */
public void importExcel(File file) {
        Workbook wb;
        Sheet sheet;
        Row row;
        wb = readExcel(file.getAbsolutePath());
        if (wb != null) {
            try {
                List<List<List<Object>>> list = new ArrayList<>();
                // 循环页签
                for (int sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) {
                    // 指定页签的值
                    sheet = wb.getSheetAt(sheetNum);
                    // 定义存放一个页签中所有数据的List
                    List<List<Object>> sheetList = new ArrayList<>();
                    // 循环行
                    for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
                        // 指定行的值
                        row = sheet.getRow(rowNum);
                        // 定义存放一行数据的List
                        List<Object> rowList = new ArrayList<>();
                        // 循环列
                        for (int cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) {
                            Cell cell = sheet.getRow(rowNum).getCell(cellNum);
                            rowList.add(getStringCellValue(cell));
                        }
                        sheetList.add(rowList);
                    }
                    list.add(sheetList);
                    //得到数据list
                }
                // 处理数据
            } catch (Exception e) {
                logger.error("遍历数据失败", e);
                e.printStackTrace();
            }
        }
    }
/**
 * @param cell
 * @Description 单元格格式
 * @Throws
 * @Return java.lang.String
 * @Date 2020-07-23 18:56:54
 * @Author WangKun
 */
public static String getStringCellValue(Cell cell) {
    String cellvalue;
    if (cell == null) {
        return "";
    }
    switch (cell.getCellType()) {
        case Cell.CELL_TYPE_STRING:
            cellvalue = cell.getStringCellValue();
            break;
        case Cell.CELL_TYPE_NUMERIC:
            if (DateUtil.isCellDateFormatted(cell)) {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                Date date = cell.getDateCellValue();
                cellvalue = sdf.format(date);
            } else {
                cellvalue = String.valueOf(cell.getNumericCellValue());
            }
            break;
        case Cell.CELL_TYPE_BOOLEAN:
            cellvalue = String.valueOf(cell.getBooleanCellValue());
            break;
        case Cell.CELL_TYPE_BLANK:
            cellvalue = "";
            break;
        default:
            cellvalue = "";
            break;
    }
    return cellvalue;
}

mave配置

<!--POI 开始 版本最好统一,否则会出现各种奇怪的问题-->
<dependency>
    <groupId>org.apache.xmlbeans</groupId>
    <artifactId>xmlbeans</artifactId>
    <version>2.6.0</version>
</dependency>
<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.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>3.9</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.1</version>
</dependency>
<!--POI 结束-->

关于java读取Excel表格数据流出现的一系列报错问题的解决方案,含辛茹苦磨砺总结得出!

参考:https://blog.csdn.net/weixin_40295575/article/details/81354099

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值