POI知识【Java程序操作Excel】

目录

1,POI概述

1.1:概述

1.1.1:简介

1.1.2:官网

1.2:入门案例

1.2.1:环境搭建

1.2.2:xls文件写操作

1.2.3:xls文件读操作

1.2.4:xlsx文件写操作

1.2.5:xlsx文件读操作

1.2.6:读取不同类型的数据


1,POI概述

1.1:概述

1.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格式档案的功能

1.1.2:官网

Apache POI - the Java API for Microsoft Documents

 

1.2:入门案例 

1.2.1:环境搭建

创建项目:

导入pom.xml依赖

   <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>

1.2.2:xls文件写操作

在2003版本中excel文件拓展名为xls

名词:

工作薄:一个excel文件,就是一个工作薄

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

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

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

文件存放位置方法:

   public String path(){
        String path = getClass().getResource("/").getPath();
        return path;
    }

注意:

Workbook workbook = new HSSFWorkbook();

 

进行POI技术生成Excel文件,方法:

 @Test
    //测试写入Excel文件以xls为后缀结尾的
    public void testWritexls() throws IOException {
        //需求:向:xls文档写数据
        //创建新的Execl工作薄
        Workbook workbook = new HSSFWorkbook();
        //在Excel文件中创建一个工作表,表头是爱吃豆的土豆
        Sheet sheet = workbook.createSheet("爱吃豆的土豆");
        for (int r = 0; r < 5; r++) {
            //在工作表中创建五行
            Row row = sheet.createRow(r);
            for (int i = 0; i < 10; i++) {
                //在工作表中创建十列 也就是单元格
                Cell cell = row.createCell(i);
                //在单元格中放入数据
                cell.setCellValue("土豆"+r+":"+i);
            }
        }
        //生成到Excel文件的存放位置
        String file = path()+"土豆.xls";
        //创建输出文件流
        FileOutputStream out = new FileOutputStream(file);
        //输出到工作薄中
        workbook.write(out);
        //进行关流
        out.close();
        System.out.println("写入成功");
    }

 示例:

1.2.3:xls文件读操作

注意:

   Workbook hssfWorkbook = new HSSFWorkbook(fileInputStream);

xls 2003 文件读操作

   //读xls
    @Test
    public void testReadxls() throws IOException {
        //确定输入文件流
        FileInputStream fileInputStream = new FileInputStream(path()+"土豆.xls");
        //工作薄
        Workbook hssfWorkbook = new HSSFWorkbook(fileInputStream);

        //获取要读文件的工作表的表名
        Sheet sheet = hssfWorkbook.getSheet("爱吃豆的土豆");
        //获得第一行索引
        int startRow = sheet.getFirstRowNum();
        //获得最后一行索引
        int endRow = sheet.getLastRowNum();
        //循环遍历方式进行读取
        for (int r =startRow; r <=endRow ; r++) {
            //读取每一行内容
            Row row = sheet.getRow(r);
            //获取每一行开始单元格和结尾单元格
            short startCell = row.getFirstCellNum();
            short endCell = row.getLastCellNum();
            //遍历每一个单元格
            for(int c = startCell ; c < endCell ; c++){
                Cell cell = row.getCell(c);
                //打印内容
                System.out.print(cell.getStringCellValue());
                System.out.print(",");
            }
            System.out.println();
        }
    }

 

 

1.2.4:xlsx文件写操作

注意:

Workbook workbook = new XSSFWorkbook();
    @Test
    public void testWriteXlsx() throws IOException {
        //需求:向:xlsx文档写数据
        //1创建工作  Workbook
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("爱吃豆的土豆");
        for (int r = 0; r < 5; r++) {
            Row row = sheet.createRow(r);
            for (int i = 0; i < 10; i++) {
                Cell cell = row.createCell(i);
                cell.setCellValue("土豆"+r+":"+i);
            }
        }
        //
        String file = path()+"土豆xlsx.xlsx";
        FileOutputStream out = new FileOutputStream(file);
        workbook.write(out);
        //进行关流
        out.close();
        System.out.println("写入成功");
    }

 

 

1.2.5:xlsx文件读操作

注意:

Workbook workbook = new XSSFWorkbook(fileInputStream);
//读xlsx类型
    @Test
    public void testReadxlsx() throws IOException {
        FileInputStream fileInputStream = new FileInputStream(path()+"土豆xlsx.xlsx");
        Workbook workbook = new XSSFWorkbook(fileInputStream);
        //获得工作表
        Sheet sheet = workbook.getSheet("爱吃豆的土豆");
        //获得行
        int startRow = sheet.getFirstRowNum();
        int endRow = sheet.getLastRowNum();

        for (int r =startRow; r <=endRow ; r++) {
            Row row = sheet.getRow(r);

            short startCell = row.getFirstCellNum();
            short endCell = row.getLastCellNum();

            for(int c = startCell ; c < endCell ; c++){
                Cell cell = row.getCell(c);
                //打印内容
                System.out.print(cell.getStringCellValue());
                System.out.print(",");
            }
            System.out.println();
        }
    }

  

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

  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吃这么好

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

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

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

打赏作者

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

抵扣说明:

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

余额充值