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();
    }


相关推荐
hrrrrb1 小时前
【Spring Security】Spring Security 概念
java·数据库·spring
小信丶1 小时前
Spring 中解决 “Could not autowire. There is more than one bean of type“ 错误
java·spring
周杰伦_Jay2 小时前
【Java虚拟机(JVM)全面解析】从原理到面试实战、JVM故障处理、类加载、内存区域、垃圾回收
java·jvm
程序员小凯5 小时前
Spring Boot测试框架详解
java·spring boot·后端
豐儀麟阁贵5 小时前
基本数据类型
java·算法
_extraordinary_6 小时前
Java SpringMVC(二) --- 响应,综合性练习
java·开发语言
程序员 Harry6 小时前
深度解析:使用ZIP流式读取大型PPTX文件的最佳实践
java
wxweven7 小时前
校招面试官揭秘:我们到底在寻找什么样的技术人才?
java·面试·校招
陈陈爱java7 小时前
新知识点背诵
java
东方佑7 小时前
基于FastAPI与LangChain的Excel智能数据分析API开发实践
langchain·excel·fastapi