【在线教育】POI入门

举报
陶然同学 发表于 2022/09/24 22:40:44 2022/09/24
【摘要】 文章目录 3.POI入门(了解) 3.1 POI 概述 3.1.1 简介 3.1.2 官网 3.2 入门案例 3.2.1 环境搭建 3.2.2 xls文件写操作 3.2.3 xlsx 文件写操作 3.2.4 xls 文件读操作 3.2.5 xlsx 文件读操作 3.2.6 读取不同类型的数据 3.POI入门(了解...

文章目录

3.POI入门(了解)

3.1 POI 概述

3.1.1 简介

3.1.2 官网

3.2 入门案例

3.2.1 环境搭建

3.2.2 xls文件写操作

3.2.3 xlsx 文件写操作

3.2.4 xls 文件读操作

3.2.5 xlsx 文件读操作

3.2.6 读取不同类型的数据

3.POI入门(了解)

3.1 POI 概述

3.1.1 简介

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

功能 描述
HSSFWorkBook 提供读写Microsoft Excel格式档案的功能,xls文档
XSSFWorkBook 提供读写Microsoft Excel OOXML格式档案的功能,xlsx文件
HWPF 提供读写Microsoft Word格式档案的功能
HSLF 提供读写Microsoft PowerPoint格式档案的功能
HDGF 提供读写Microsoft Visio格式档案的功能

3.1.2 官网

Apache POI - the Java API for Microsoft Documents

3.2 入门案例

3.2.1 环境搭建

  • 创建项目:

  • 修改pom

    <dependencies>
            <!--xls-->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.9</version>
            </dependency>
            <!--xlsx-->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.9</version>
            </dependency>
            <!--日期格式化工具-->
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.10.1</version>
            </dependency>
            <!--test-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
            </dependency>
        </dependencies>

3.2.2 xls文件写操作

  • excel2003 文件扩展名为 xls

  • 名词:

    • 工作簿:一个excel文件,就是一个工作簿

    • 工作表:一个工作簿中,可以所有多个工作表Sheet

    • 行:每一个工作表,包含多行row

    • 单元格:每行有多个单元格Cell组成。

package com.zx.poi;
​
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.joda.time.DateTime;
import org.junit.Test;
​
import java.io.FileOutputStream;
import java.io.IOException;
​
public class Excel03Test {
​
    @Test
    public void testWrite03() throws IOException {
​
        // 创建新的Excel 工作簿
        Workbook workbook = new HSSFWorkbook();
​
        // 在Excel工作簿中建一工作表,其名为缺省值 Sheet0
        //Sheet sheet = workbook.createSheet();
​
        // 如要新建一名为"信息统计"的工作表,其语句为:
        Sheet sheet = workbook.createSheet("信息统计");
​
        // 创建行(row 1)
        Row row1 = sheet.createRow(0);
​
        // 创建单元格(col 1-1)
        Cell cell11 = row1.createCell(0);
        cell11.setCellValue("今日人数");
​
        // 创建单元格(col 1-2)
        Cell cell12 = row1.createCell(1);
        cell12.setCellValue(666);
​
        // 创建行(row 2)
        Row row2 = sheet.createRow(1);
​
        // 创建单元格(col 2-1)
        Cell cell21 = row2.createCell(0);
        cell21.setCellValue("统计时间");
​
        //创建单元格(第三列)
        Cell cell22 = row2.createCell(1);
        String dateTime = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        cell22.setCellValue(dateTime);
​
        // 新建一输出文件流(注意:要先创建文件夹)
        FileOutputStream out = new FileOutputStream("d://zx/a.xls");
        // 把相应的Excel 工作簿存盘
        workbook.write(out);
        // 操作结束,关闭文件
        out.close();
​
        System.out.println("文件生成成功");
    }
}

3.2.3 xlsx 文件写操作

excel2007+ 文件扩展名为 xlsx

package com.zx.poi;
​
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.joda.time.DateTime;
import org.junit.Test;
​
import java.io.FileOutputStream;
import java.io.IOException;
​
public class Excel07Test {
​
    @Test
    public void testWrite07() throws IOException {
​
        // 创建新的Excel 工作簿
        Workbook workbook = new XSSFWorkbook();
​
        // 在Excel工作簿中建一工作表,其名为缺省值 Sheet0
        //Sheet sheet = workbook.createSheet();
​
        // 如要新建一名为"信息统计"的工作表,其语句为:
        Sheet sheet = workbook.createSheet("信息统计");
​
        // 创建行(row 1)
        Row row1 = sheet.createRow(0);
​
        // 创建单元格(col 1-1)
        Cell cell11 = row1.createCell(0);
        cell11.setCellValue("今日人数");
​
        // 创建单元格(col 1-2)
        Cell cell12 = row1.createCell(1);
        cell12.setCellValue(666);
​
        // 创建行(row 2)
        Row row2 = sheet.createRow(1);
​
        // 创建单元格(col 2-1)
        Cell cell21 = row2.createCell(0);
        cell21.setCellValue("统计时间");
​
        //创建单元格(第三列)
        Cell cell22 = row2.createCell(1);
        String dateTime = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        cell22.setCellValue(dateTime);
​
        // 新建一输出文件流(注意:要先创建文件夹)
        FileOutputStream out = new FileOutputStream("d://zx/b.xlsx");
        // 把相应的Excel 工作簿存盘
        workbook.write(out);
        // 操作结束,关闭文件
        out.close();
​
        System.out.println("文件生成成功");
    }
}

3.2.4 xls 文件读操作

// xls 2003 文件读操作
    @Test
    public void testXlsRead() throws Exception {
        //1 确定文件流
        FileInputStream is = new FileInputStream("D:\\xml\\user.xls");
        //2 开始读
        // 2.1 工作簿
        HSSFWorkbook workbook = new HSSFWorkbook(is);
        // 2.2 工作表
        HSSFSheet sheet = workbook.getSheet("用户表");
        int rowStart = sheet.getFirstRowNum();      //第一行索引号(从0开始)
        int rowEnd = sheet.getLastRowNum();         //最后一行的索引号(从0开始)
        // 2.3 行
        for(int i = rowStart ; i <= rowEnd ; i ++) {
            HSSFRow row = sheet.getRow(i);
            int cellStart = row.getFirstCellNum();      //第一列的索引号(从0开始)
            int cellEnd = row.getLastCellNum() ;        //最后一列的编号(从1开始)
            // 2.4 列
            for(int c = cellStart; c < cellEnd ; c++) {
                HSSFCell cell = row.getCell(c);
//                System.out.println(cell.getCellType());
                if(cell.getCellType() == Cell.CELL_TYPE_STRING) {
                    // 字符串
                    System.out.print(row.getCell(c).getStringCellValue() + ", ");
                }
                if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                    // 字符串
                    System.out.print(row.getCell(c).getNumericCellValue() + ", ");
                }
            }
            System.out.println();
        }
        // 3 释放资源
        is.close();
    }

3.2.5 xlsx 文件读操作

 // xlsx 2007 文件读操作
    @Test
    public void testXlsxRead() throws Exception {
        //1 确定文件流
        FileInputStream is = new FileInputStream("D:\\xml\\user.xlsx");
        //2 开始读
        // 2.1 工作簿
        Workbook workbook = new XSSFWorkbook(is);
        // 2.2 工作表
        Sheet sheet = workbook.getSheet("用户表");
        int rowStart = sheet.getFirstRowNum();      //第一行索引号(从0开始)
        int rowEnd = sheet.getLastRowNum();         //最后一行的索引号(从0开始)
        // 2.3 行
        for(int i = rowStart ; i <= rowEnd ; i ++) {
            Row row = sheet.getRow(i);
            int cellStart = row.getFirstCellNum();      //第一列的索引号(从0开始)
            int cellEnd = row.getLastCellNum() ;        //最后一列的编号(从1开始)
            // 2.4 列
            for(int c = cellStart; c < cellEnd ; c++) {
                Cell cell = row.getCell(c);
//                System.out.println(cell.getCellType());
                if(cell.getCellType() == Cell.CELL_TYPE_STRING) {
                    // 字符串
                    System.out.print(row.getCell(c).getStringCellValue() + ", ");
                }
                if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
                    // 字符串
                    System.out.print(row.getCell(c).getNumericCellValue() + ", ");
                }
            }
            System.out.println();
        }
        // 3 释放资源
        is.close();
    }

3.2.6 读取不同类型的数据

@Test
public void testRead07() throws Exception{
​
    InputStream is = new FileInputStream("d:/0704.xlsx");
​
    Workbook workbook = new XSSFWorkbook(is);
    Sheet sheet = workbook.getSheetAt(0);
​
    // 读取第一行第一列
    Row row = sheet.getRow(0);
    Cell cell1 = row.getCell(0);
    Cell cell2 = row.getCell(1);
​
​
    // 输出单元内容
    System.out.println(cell1.getStringCellValue());
    System.out.println(cell2.getNumericCellValue());
​
    // 操作结束,关闭文件
    is.close();
}

文章来源: blog.csdn.net,作者:陶然同学,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_45481821/article/details/126691276

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。