Java使用apache poi操作excel的方式

目录
  • 一.基本介绍
    • 1.1、Apache POI介绍
    • 1.2、HSSF和XSSF
    • 1.3、引入依赖
  • 二.利用poi库创建excel
    • 2.1、创建一个空excel
    • 2.2、简单演示写入excel内容
    • 2.3、通常的写入数据流程
  • 三.使用POI读取Excel内容
    • 3.1、读取excel示例

一.基本介绍

1.1、Apache POI介绍

  Apache POI是一个可以进行微软的文档进行开源库,可以操作的文档类型包括word、ppt、excel、visio、outlook....

  本文主要针对Apache POI对excel的操作进行介绍,主要包括如何创建一个excel、录入数据、读取excel数据的方式。

  参考官方文档:

  1.首页:https://poi.apache.org/

  2.Excel文档介绍使用方式

1.2、HSSF和XSSF

  在POI中,如果要操作Excel,可以有两种操作“模式”,分别是HSSF和XSSF,其中HSSF可以处理win97以及低于2007的excel,而XSSF可以用于处理2007以及更高的版本excel,所以我们一般都会使用XSSF。

  有一个很重要的术语:工作薄,其实可以理解为“文档”,excel、word,都属于工作簿,英文workbook。

1.3、引入依赖

  只需要导入poi-ooxml这个库即可。

<dependencies>
    <!-- poi库 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.2</version>
    </dependency>

    <!-- 示例以单元测试的形式,所以需要导入junit -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
    </dependency>
</dependencies>

二.利用poi库创建excel

2.1、创建一个空excel

  下面的代码运行后

package cn.ganlixin.poi;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import java.io.*;
public class CreateExcelTest {
    /**
     * 创建一个空的Excel文件
     */
    @Test
    public void testCreateEmptyExcel() throws IOException {
        // 创建文件
        BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("data.xlsx"));
        // 创建工作簿类(所有要写入excel的数据,都将保存在workbook中)
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 将workbook中的数据写入到文件中。
        workbook.write(outputStream);
        // 关闭
        workbook.close();
        outputStream.close();
    }
}

2.2、简单演示写入excel内容

  下面演示创建一个data.xlsx,并在“my-sheet-1”sheet内的第5行第3列写入一个“hello world”:

package cn.ganlixin.poi;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import java.io.*;
public class CreateExcelTest {
    /**
     * 简单演示如何写入数据内容
     */
    @Test
    public void testCreateSimpleWorkbook() throws IOException {
        // 指定创建的excel文件名称
        BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("data.xlsx"));
        // 定义一个工作薄(所有要写入excel的数据,都将保存在workbook中)
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 创建一个sheet
        XSSFSheet sheet = workbook.createSheet("my-sheet-1");
        // 开始写入数据流程,2大步:1、定位到单元格,2、写入数据;定位单元格,需要通过行、列配合指定。
        // step1: 先选择第几行(0表示第一行),下面表示在第6行
        XSSFRow row = sheet.createRow(5);
        // step2:选择第几列(0表示第一列),注意,这里的第几列,是在上面指定的row基础上,也就是第6行,第3列
        XSSFCell cell = row.createCell(2);
        // step3:设置单元格的数据(写入数据)
        cell.setCellValue("hello world");
        // 执行写入操作
        workbook.write(outputStream);
        workbook.close();
        outputStream.flush();
        outputStream.close();
    }
}

  运行后,下面是生成的excel:

2.3、通常的写入数据流程

  一般写入excel的数据都是结构化的(类似于数据库表的结构),下面是一个示例,创建一个users.xlsx文档:

package cn.ganlixin.poi;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class CreateExcelTest {
    private static class User {
        private Integer id;
        private String name;
        private Integer age;
        private String addr;
        // 避免占用篇幅,所以省略了构造方法、getter、setter
    }
    /**
     * 写入结构化的用户信息数据
     */
    @Test
    public void testCreateUsersExcel() throws IOException {
        List<User> userList = new ArrayList<>();
        userList.add(new User(1, "abc", 99, "北京"));
        userList.add(new User(2, "lol", 77, "上海"));
        userList.add(new User(3, "qaq", 88, "深圳"));
        userList.add(new User(4, "owo", 66, "杭州"));
        // 指定创建的excel文件名称
        BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream("users.xlsx"));
        // 定义一个工作薄(所有要写入excel的数据,都将保存在workbook中)
        XSSFWorkbook workbook = new XSSFWorkbook();
        // 创建一个sheet
        XSSFSheet sheet = workbook.createSheet("my-sheet");
        // 第一行,为表头,需要单独写入,下面是错误方式,因为在反复的创建第1行(rowNumber为0)
        /*
        sheet.createRow(0).createCell(0).setCellValue("编号");
        sheet.createRow(0).createCell(1).setCellValue("姓名");
        sheet.createRow(0).createCell(2).setCellValue("年龄");
        sheet.createRow(0).createCell(3).setCellValue("城市");
         */
        // 正确方式
        XSSFRow head = sheet.createRow(0);
        head.createCell(0).setCellValue("编号");
        head.createCell(1).setCellValue("姓名");
        head.createCell(2).setCellValue("年龄");
        head.createCell(3).setCellValue("城市");
        // 接下来遍历要录入的数据(建议使用for,并且从第2行开始,也就是rowNumber为1,因为表头占了一行)
        for (int rowNumber = 1, index = 0; index < userList.size(); index++, rowNumber++) {
            User user = userList.get(index);
            // 写入数据流程,1、定位到单元格,2、写入数据;定位单元格,需要通过行、列配合指定。
            XSSFRow row = sheet.createRow(rowNumber);
            row.createCell(0).setCellValue(user.getId());
            row.createCell(1).setCellValue(user.getName());
            row.createCell(2).setCellValue(user.getAge());
            row.createCell(3).setCellValue(user.getAddr());
        }
        // 执行写入操作
        workbook.write(outputStream);
        workbook.close();
        outputStream.flush();
        outputStream.close();
    }
}

  生成的excel如下:

三.使用POI读取Excel内容

3.1、读取excel示例

  下面针对上面创建的users.xlsx进行读取并打印

package cn.ganlixin.poi;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class ReadExcelTest {
    @Test
    public void testReadUsersExcel() throws IOException {
        // 指定excel文件,创建缓存输入流
        BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream("users.xlsx"));
        // 直接传入输入流即可,此时excel就已经解析了
        XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
        // 选择要处理的sheet名称
        XSSFSheet sheet = workbook.getSheet("my-sheet");
        // 第一行表头,单独处理
        // 迭代遍历sheet剩余的每一行
        for (int rowNum = 0; rowNum < sheet.getPhysicalNumberOfRows(); rowNum++) {
            if (rowNum == 0) { // 读取第一行(表头)
                XSSFRow head = sheet.getRow(rowNum);
                String headColumn_1 = head.getCell(0).getStringCellValue();
                String headColumn_2 = head.getCell(1).getStringCellValue();
                String headColumn_3 = head.getCell(2).getStringCellValue();
                String headColumn_4 = head.getCell(3).getStringCellValue();
                String headStr = String.format("%s\t%s\t%s\t%s", headColumn_1, headColumn_2, headColumn_3, headColumn_4);
                System.out.println(headStr);
            } else { // 非表头(注意读取的时候要注意单元格内数据的格式,要使用正确的读取方法)
                XSSFRow row = sheet.getRow(rowNum);
                int id = (int) row.getCell(0).getNumericCellValue();
                String name = row.getCell(1).getStringCellValue();
                int age = (int) row.getCell(2).getNumericCellValue();
                String addr = row.getCell(3).getStringCellValue();
                String rowContent = String.format("%s\t%s\t%s\t%s", id, name, age, addr);
                System.out.println(rowContent);
            }
        }
        workbook.close();
        inputStream.close();
    }
}

  运行输出如下:

到此这篇关于Java使用apache poi进行excel相关操作的文章就介绍到这了,更多相关java  apache poi操作excel内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java使用Apache.POI中HSSFWorkbook导出到Excel的实现方法

    使用Apache.POI中HSSFWorkbook导出到Excel,具体内容如下所示: 1.引入Poi依赖(3.12) 依赖如下: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.12</version> </dependency> 2.创建实体类(User.java) package

  • java后台利用Apache poi 生成excel文档提供前台下载示例

    之前在项目中会用到在Java在后台把数据填入Word文档的模板来提供前台下载,为了自己能随时查看当时的实现方案及方便他人学习我写了这篇博客,访问量已经是我写的博客里第一了.于是乎我在学会用Java在后台利用Apache poi 生成excel文档提供前台下载之后就想着来写一篇姊妹篇啦. 在生成Excel文档的时候我采用了和生成Word时的不同方法,Apache poi.它是用Java编写的免费开源的跨平台的 Java API,提供API给Java程式对Microsoft Office格式档案读和

  • Java使用Apache POI库读取Excel表格文档的示例

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 项目下载页:http://poi.apache.org/download.html Apache POI 是创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API.用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Jav

  • Java通过apache poi生成excel实例代码

    首先,jar maven 添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.15</version> </dependenc

  • Java使用apache poi操作excel的方式

    目录 一.基本介绍 1.1.Apache POI介绍 1.2.HSSF和XSSF 1.3.引入依赖 二.利用poi库创建excel 2.1.创建一个空excel 2.2.简单演示写入excel内容 2.3.通常的写入数据流程 三.使用POI读取Excel内容 3.1.读取excel示例 一.基本介绍 1.1.Apache POI介绍 Apache POI是一个可以进行微软的文档进行开源库,可以操作的文档类型包括word.ppt.excel.visio.outlook.... 本文主要针对Apac

  • Java使用poi操作excel实例解析

    本文实例为大家分享了Java使用poi操作excel的具体代码,供大家参考,具体内容如下 依赖poi的jar包,pom.xml配置如下: <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0h

  • java使用POI操作excel文件

    一.POI的定义 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作Excel 95及以后的版本,即可操作后缀为 .xls 和 .xlsx两种格式的excel. POI全称 Poor Obfuscation Implementation,直译为"可怜的模糊实现",利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:htt

  • Apache POI操作批量导入MySQL数据库

    目录 1.POI操作入门案例 1.1.从Excel文件读取数据1 1.2.从Excel文件读取数据2 1.3.向Excel文件写入数据 2.使用POI批量导入数据到MySQL数据库 2.1.创建导入数据的Excel模板文件 2.2.批量上传文件的后端代码编写 3.批量导入数据测试 poi介绍: Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操

  • JavaWeb使用POI操作Excel文件实例

    1.为项目添加POI POI官网链接 点进去之后下载(上边的是编译好的类,下边的是源代码) 解压文件夹,把下面三个文件复制到WebComtent>WEB-INF>lib文件夹下 再把这三个文件复制到Tomcat的lib文件夹下,否则Tomcat会因为找不到类而报错(这个地方郁闷了一上午) 读取".xls"格式使用  import org.apache.poi.hssf.usermodel.*;包的内容,例如:HSSFWorkbook 读取".xlsx"格

  • Java Web使用POI导出Excel的方法详解

    本文实例讲述了Java Web使用POI导出Excel的方法.分享给大家供大家参考,具体如下: 采用Spring mvc架构: Controller层代码如下 @Controller public class StudentExportController{ @Autowired private StudentExportService studentExportService; @RequestMapping(value = "/excel/export") public void

随机推荐