POI:对Excel的基本读操作 整理2

1 简单读取操作

java 复制代码
public class ExcelRead {
    String PATH = "D:\\Idea-projects\\POI\\POI_projects";

    // 读取的一系列方法
    // ......
}

因为07版本和03版本操作流程大差不差,所以这边就以03版本为例

java 复制代码
    @Test
    public void testRead03() throws IOException {

        //获取文件流
        FileInputStream fileInputStream = new FileInputStream(PATH + "xiexu03.xls");

        //1.创建一个工作簿,获取到文件中的内容
        Workbook workbook = new HSSFWorkbook(fileInputStream);

        // 2.得到表,获取具体位置的内容
        Sheet sheet = workbook.getSheetAt(0);

        // 3.得到行
        Row row = sheet.getRow(0);

        // 4.得到列
        Cell cell = row.getCell(1);

        // System.out.println(cell.getStringCellValue());  // 得到单元格中的字符串内容

        System.out.println(cell.getNumericCellValue());   // 得到单元格中的数字内容

        fileInputStream.close();
    }



2 分类型读取数据

读取下列含有不同数据类型的Excel表格,并输出读取的数据


java 复制代码
    @Test
    public void testCellType() throws IOException {
        //获取文件流
        FileInputStream fileInputStream = new FileInputStream("D:\\Idea-projects\\POI\\明细表.xls");

        //1.创建一个工作簿
        Workbook workbook = new HSSFWorkbook(fileInputStream);
        Sheet sheet = workbook.getSheetAt(0);

        // 2. 获取标题内容
        Row rowTitle = sheet.getRow(0);
        if (rowTitle != null) {
            // 这种写法一定要掌握
            int cellCount = rowTitle.getPhysicalNumberOfCells();   // 读取所有有数据的单元格数量

            for (int cellNum = 0; cellNum < cellCount; cellNum++) {
                Cell cell = rowTitle.getCell(cellNum);
                if (cell != null) {
                    CellType cellType = cell.getCellType();
                    String cellValue = cell.getStringCellValue();
                    System.out.print(cellValue + " | ");
                }
            }
            System.out.println();
        }

        // 获取表中的内容
        int rowCount = sheet.getPhysicalNumberOfRows();   // 获取所有含有数据的行的数量
        for (int rowNum = 1; rowNum < rowCount; rowNum++) {
            Row rowData = sheet.getRow(rowNum);
            if (rowData != null) {
                // 读取行中的列
                int cellCount = rowTitle.getPhysicalNumberOfCells();
                for (int cellNum = 0; cellNum < cellCount; cellNum++) {
                    System.out.print("[" + (rowNum + 1) + "-" + (cellNum + 1) + "]");
                    Cell cell = rowData.getCell(cellNum);

                    // 匹配列的数据类型

                    if ( cell != null) {
                        CellType cellType = cell.getCellType();
                        String cellValue = "";

                        switch (cell.getCellType()) {
                            case STRING:
                                System.out.println("字符串");
                                cellValue = cell.getStringCellValue();
                                break;
                            case BLANK:
                                System.out.println("空");
                                break;
                            case BOOLEAN:
                                System.out.println("布尔");
                                cellValue = String.valueOf(cell.getBooleanCellValue());
                                break;
                            case NUMERIC:
                                System.out.println("数字");   // 分为日期和普通数字
                                if (DateUtil.isCellDateFormatted(cell)) {
                                    System.out.println("日期");
                                    Date date = cell.getDateCellValue();
                                    DateTime time = new DateTime(date);
                                    cellValue = time.toString("yyyy-MM-dd");
                                } else{
                                    //   普通数字  -> 转换为字符串输出
                                    System.out.println("转换为字符串输出");
                                    cell.setCellType(CellType.STRING);  // 需要设置类型为字符串
                                    cellValue = cell.toString();
                                }
                                break;
                            case ERROR:
                                System.out.println("数据类型错误");
                                break;
                        }
                        System.out.println(cellValue);
                    }
                }
            }
        }

        fileInputStream.close();
    }




3 读取公式


java 复制代码
 @Test
    public void  testReadCalculate() throws IOException {   // 公式

        //获取文件流
        FileInputStream fileInputStream = new FileInputStream("D:\\Idea-projects\\POI\\公式.xls");

        //1.创建一个工作簿
        Workbook workbook = new HSSFWorkbook(fileInputStream);

        // 2.得到表
        Sheet sheet = workbook.getSheetAt(0);
    
        // 3.得到行
        Row row = sheet.getRow(4);

        // 4.得到列
        Cell cell = row.getCell(0);

        // 拿到计算公式
        FormulaEvaluator formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);

        // 输出单元格的内容
        CellType cellType = cell.getCellType();

        switch (cell.getCellType()) {
            case FORMULA:
                System.out.println("公式");
                String formula = cell.getCellFormula();   // 获取计算公式
                System.out.println(formula);

                // 计算
                CellValue evaluate = formulaEvaluator.evaluate(cell);
                String cellValue = evaluate.formatAsString();   // 将计算结果格式化为字符串

                // 输出
                System.out.println(cellValue);
                break;
        }

        fileInputStream.close();
    }


相关推荐
阿里云基础软件2 分钟前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
Wang's Blog44 分钟前
Java 项目实战: 交友项目 - 项目:需求分析与滑动数据设计
java·开发语言·交友
前端 贾公子1 小时前
第 5 章:Codex 从可运行程序到可交付工具
java·前端·数据库
CoderYanger1 小时前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc
一条泥憨鱼2 小时前
【Kafka】零基础学习教程
java·分布式·学习·kafka
Wang's Blog2 小时前
Java 项目实战:交友项目 - 即时通信总结:全链路复盘、可复用清单与自检
java·python·交友
文丑颜不良啊2 小时前
LeetCode1501~1520题目解析
java·leetcode
长不大的杨瑞杰2 小时前
OpenCode v2 LSP 实战:内置语言服务器、自定义配置与诊断闭环
java·人工智能·typescript·lsp·opencode
云和数据.ChenGuang3 小时前
python和java的try
java·开发语言·python
日日大王学编程3 小时前
阿里巴巴开源 Data Agent(Text2SQL)项目全维度详解
java·ai·开源