Excel基础

Excel基础知识
单元格的内容决定了单元格的类型,POI中定义的7种单元格类型:
![在这里插入图片描述](https://img-blog.csdnimg.cn/6c02996842ae4be7bcd21e18831fa99e.png

1.Excel的基本操作
想要学习Excle的基本读写,首先我们得了解常见得Excel得基本格式03与07版excel的区别.

1.03与07版excel的区别
2.使用对象不同 03使用HSSFWorkbook, 07使用XSSWorkbook
3.HSSFWORKbook最大只能导入65536行,XSSWorkbook版可导入1048576行
4.文件后缀名不同,HSSFWORKbook的后缀名为xls,XSSWorkbook的后缀为xlsx

(1).使用HSSFWorkbook对象进行Excel数据的写操作

	String PATH = "F:\\io_test_file\\excel_file\\";
	// 03版Excel HSSFWorkBook
    @Test
    public void testWrite03() throws IOException {
        long l = System.currentTimeMillis();
        // 创建一个工作簿
        Workbook workbook = new HSSFWorkbook();
        // 创建一个工作表
        Sheet sheet = workbook.createSheet("工作量统计");
        // 创建一个行 其实下标为0
        Row row1 = sheet.createRow(0);
        // 创建一个单元格(1,1)
        Cell cell11 = row1.createCell(0);

        // 向表格中填充数据
        cell11.setCellValue("卸货");

        //(1,2)
        Cell cell12 = row1.createCell(1);
        cell12.setCellValue("16箱水果");

        // 第二行
        Row row2 = sheet.createRow(1); // 创建行
        // 创建列(2,1)
        Cell cell21 = row2.createCell(0);
        // 为第二行第一列设置值
        cell21.setCellValue("拖地");
        // 在行的基础上 创建列(2,2)
        Cell cell22 = row2.createCell(1);
        // 设置列22 对应的值
        String currntTime = new DateTime().toString("10次");
        cell22.setCellValue(currntTime);

        // 生成一张表(IO流) 注03 HSSF版本使用xls结尾
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "工作量统计.xls");
        // 输出
        workbook.write(fileOutputStream);
        // 关闭流
        if (null != fileOutputStream) {
            fileOutputStream.close();
        }
        if (null != workbook) {
            workbook.close();
        }
        System.out.println("写入耗时: "+(System.currentTimeMillis() - l));
    }

(2).使用XSSWorkboot进行Excel的写操作

   String PATH = "F:\\io_test_file\\excel_file\\";
   /**
     * XSSWorkboot 的写操作
     * @throws IOException
     */
    @Test
    public void growStaticTable() throws IOException {
        long l = System.currentTimeMillis();
        // 创建工作簿
        Workbook workbook = new XSSFWorkbook();
        // 利用工作簿对象 创建工作表
        Sheet sheet = workbook.createSheet("布布和一二");

        // 在工作表中创建一行
        Row row1 = sheet.createRow(0);
        // 创建第二行
        Row row2 = sheet.createRow(1);

        // 创建第一行 第一列
        Cell cell11 = row1.createCell(0);
        // 在第一行第一列中写入值
        cell11.setCellValue("布布");
        // 在第一行中创建第二列
        Cell cell12 = row1.createCell(1);
        // 在第一行第二列中设置值
        cell12.setCellValue("胖黑的bubu");


        // 创建第二行 第一列
        Cell cell21 = row2.createCell(0);

        cell21.setCellValue("一二");
        // 创建第二行 第二列
        Cell cell22 = row2.createCell(1);
        // 设置值
        cell22.setCellValue("白胖的一二");


        // 创建输出流对象
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "布布和一二.xlsx");
        // 调用工作簿对象 惊醒写入操作
        workbook.write(fileOutputStream);

        // 关流
        if (fileOutputStream != null) {
            fileOutputStream.close();
        }
        if (workbook != null) {
            workbook.close();
        }
        System.out.println("写入耗时: "+(System.currentTimeMillis() - l));
    }

(3).使用HSSFWorkbook进行批量读操作

	String PATH = "F:\\io_test_file\\excel_file\\";
	/**
     * Excel读操作 HSSFWorkbook
     */
    @Test
    public void excelReadOpt() throws IOException {
        //获取文件流
        FileInputStream inputStream = new FileInputStream(PATH + "工作量统计.xls");

        //1.创建一个工作簿。使用excel能操作的这边都可以操作
        Workbook workbook = new HSSFWorkbook(inputStream);
        //2.得到表
        Sheet sheet = workbook.getSheetAt(0);

        // 输出表中所有的数据
        // 获取表中记录数
        int recordNum = sheet.getPhysicalNumberOfRows();
        // 获取所有记录中的值
        for (int rowNum = 0; rowNum < recordNum; rowNum++) {
            // 根据记录索引 获取记录对应的数据
            Row rowData = sheet.getRow(rowNum);
            // 行不为空 获取列数据
            if (rowData != null) {
                // 获取行对应的列数
                int cellCount = rowData.getPhysicalNumberOfCells();
                // 根据列数 逐列读取数据
                for (int cellNum = 0; cellNum < cellCount; cellNum++) {
                    // 获取单元格
                    Cell cell = rowData.getCell(cellNum);
                    // 获取单元格的数据类型
                    CellType cellType = cell.getCellTypeEnum();
                    String cellVal = "";

                    // 创建计算器对象
                    FormulaEvaluator hssfFormulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);

                    // 依据单元格数据类型输出数据
                    switch (cellType) {
                        case NUMERIC:
                            double numericCellValue = cell.getNumericCellValue();
                            System.out.println("numericCellValue = " + numericCellValue);
                            break;
                        case STRING:
                            String stringCellValue = cell.getStringCellValue();
                            System.out.println("stringCellValue = " + stringCellValue);
                            break;
                        case BOOLEAN:
                            boolean booleanCellValue = cell.getBooleanCellValue();
                            System.out.println("booleanCellValue = " + booleanCellValue);
                            break;
                        case FORMULA: // 公式类型
                            String cellFormula = cell.getCellFormula();
                            System.out.println("cellFormula = " + cellFormula);
                            // 使用计算器 依据公式计算 单元格的值
                            CellValue evaluateRet = hssfFormulaEvaluator.evaluate(cell);
                            // 将计算结果 格式化为字符串
                            String cellValue = evaluateRet.formatAsString();
                            // 输出计算结果
                            System.out.println("cellValue = " + cellValue);
                            break;
                        case BLANK: // 空单元格 没值 但有样式
                            System.out.println("空单元格 没值 但有样式");
                            break;
                        case ERROR:
                            System.out.print("【数据类型错误】");
                            break;
                        default:
                            System.out.println("未知类型");
                            break;
                    }
                }
            }
        }
    }

(4).XSSFWorkbook的读操作同(3),替换操作对象即可,此处略.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶枫^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值