• Apache Poi实现excel解析


    一、说明

    1、本文通过使用 poi 工具解析 excel 表格数据,实现导入导出
    2、excel目前有两种格式 2003版本的 excel.xls 与 2007版本的 excel.xlsx ,注意两种文件的后缀名不同
    3、针对不同版本的 excel ,使用不同的类,xls结尾的实现 HSSFWorkbook类,xlsx的实现 XSSFWorkbook
    4、实现过程每一步基本上都有注释,不明白的请留言

    二 、实现过程如下

    • 创建maven工程,添加依赖
            <!-- 03版 表格 -->
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>4.0.1</version>
            </dependency>
    
            <!-- 07版 表格 -->
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>4.0.1</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml-schemas</artifactId>
                <version>4.0.1</version>
            </dependency>
            <dependency>
    
    • 实现相应的类
    /**
     * apache poi demo测试
     */
    public class PoiDemo {
        public static void main(String[] args) throws Exception {
            // 1、获取一个工作簿 根据 excel 文件获取
            XSSFWorkbook workbook = new XSSFWorkbook("D:\test.xlsx");    // 此处加载的是我本地使用测试excel文件
            // 2、通过工作簿获取到一个sheet页
            // workbook.getSheet("sheetName"); 这是通过 sheet 的名字获取sheet页
            XSSFSheet sheet = workbook.getSheetAt(0);// 通过索引获取第几个sheet页
            // 3、通过sheet页获取表格的内容,获取sheet页中每一行 和 每一个单元格
            // 第一层循环,获取到表格的每一行
            for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
                XSSFRow row = sheet.getRow(rowNum);
                StringBuilder stringBuilder = new StringBuilder();
                // 第二层循环,精准获取到每一个单元格
                for (int cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) {
                    // 现在精确获取到了每一个单元格
                    Cell cell = row.getCell(cellNum);
                    // 获取到每一个单元格的内容
                    if (cell != null) {
                        Object value = getCellValue(cell);
                        stringBuilder.append(value).append("-");
                    }
    
                }
                System.out.println(stringBuilder);
            }
        }
    
        /**
         * 获取单元格的数据
         *
         * @param cell 单元格
         * @return
         */
        public static Object getCellValue( Cell cell) {
            // 对应于数据库,每一个字段的数据类型可能都不同
            // 1、获取到单元格的属性,
            CellType cellType = cell.getCellType();
            // 2、通过单元格属性获取数据
            Object value = null;
            switch (cellType) {
                case STRING:
                    value = cell.getStringCellValue();
                    break;
                case BOOLEAN:
                    value = cell.getBooleanCellValue();
                    break;
                case NUMERIC:
                    if (DateUtil.isCellDateFormatted(cell)){
                        // 日期格式
                        value = cell.getDateCellValue();
                    } else {
                        // 数字
                        value = cell.getNumericCellValue();
                    }
                    break;
                case FORMULA:
                    value = cell.getCellFormula();
                    break;
                default:
                    break;
            }
            return value;
        }
    }
    
    • 本地测试文件
    • 结果如下
    • 若觉得写得还可以的话,请点击支持一下,你的支持是我继续写下去的动力
  • 相关阅读:
    PHP学习
    python获取命令行参数 启动文件
    SQLServer中char、varchar、nchar、nvarchar的区别
    VBA
    python 爬虫资料
    python乱码问题之爬虫篇
    angularjs component
    通过jQuery Ajax使用FormData对象上传文件
    directive完成UI渲染后执行JS
    交易日志
  • 原文地址:https://www.cnblogs.com/shanggushenlong/p/11773416.html
Copyright © 2020-2023  润新知