Java 基于Apache POI实现Excel读写操作

这篇具有很好参考价值的文章主要介绍了Java 基于Apache POI实现Excel读写操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实践环境

Win10

Java JDK1.8

代码实现

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<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.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.shouke</groupId>
    <artifactId>example</artifactId>
    <version>1.0</version>

    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <poi.ooxml.version>4.1.2</poi.ooxml.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>${poi.ooxml.version}</version>
        </dependency>
    <dependencies>        
</project>

读取Excel

代码实现

exmple.xml

Java 基于Apache POI实现Excel读写操作

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.util.Iterator;

public class JavaStudy {
    public static void readExcel(String filePath) throws Exception {
        //获取文件流
        FileInputStream inputStream = new FileInputStream(filePath);

        //1.创建工作簿
        Workbook workbook = new XSSFWorkbook(inputStream);

        //2.得到Sheet表
//        Sheet sheet = workbook.getSheet("Sheet1"); // 通过Sheet名称获取
        Sheet sheet = workbook.getSheetAt(0); // 通过索引获取 //获取第1个Sheet表

        //3.获取行
        Row row = sheet.getRow(0); // 获取第1行 // 注意:行索引从0开始
        System.out.println(sheet.getFirstRowNum()); // 获取首行(内容行)索引  // 输出:0
        System.out.println(sheet.getLastRowNum()); // 获取最后行(内容行)索引 // 输出:5

        //4.获取单元格
        Cell cell = row.getCell(0); // 获取行的第0个元

        //5.获取单元格的值
        System.out.println(getValue(cell)); // 输出:姓名

        System.out.println(row.getFirstCellNum()); // 获取当前行第一个内容单元格索引 // 输出:0
        System.out.println(row.getLastCellNum()); // 获取当前行最后内容单元格往后下一个单元格的索引 // 输出:7 // 输出值为:最后内容单元格索引+1

        // 遍历当前行内容化单元格
        // 方法1:
        Iterator<Cell> cellIterator = row.cellIterator();
        while (cellIterator.hasNext()) {
            cell = cellIterator.next();
            System.out.println(cell);
        }

        // 方法2:
        row.forEach(currCell -> {
            System.out.print(currCell+", ");
            System.out.println(currCell.getCellType());
        });


        // 遍历获取所有内容行单元格的值
        for (int rowIndex=0; rowIndex<=sheet.getLastRowNum(); rowIndex++) {
            row = sheet.getRow(rowIndex);
            for(int colIndex=0; colIndex<row.getLastCellNum(); colIndex++) {
                System.out.println(getValue(row.getCell(colIndex)));
            }
        }


        inputStream.close();
    }

    public static Object getValue(Cell cell) {
        //匹配类型数据
        Object cellValue = null;
        if (cell != null) { // 单元格未经过编辑的情况下,一定为null //cell为null的情况下,对空单元格调用API会导致上述for循环提前结束
            CellType cellType = cell.getCellType(); // 获取单元格数值类型
            switch (cellType) {
                case STRING: //字符串
                    System.out.print("String类型:");
                    cellValue = cell.getStringCellValue();
                    break;
                case BOOLEAN: //布尔类型
                    System.out.print("Boolean类型:");
                    cellValue = cell.getBooleanCellValue();
                    break;
                case BLANK: //空
                    System.out.print("BLANK类型:"); // 填写值后,请清理掉值,从没填过值,那么cell=null,合并的单元格被当做一个单元格
                    break;
                case NUMERIC: //数字(整数、小数、日期)
                    System.out.print("NUMERIC类型:");
                    if (DateUtil.isCellDateFormatted(cell)) { //日期
                        System.out.print("日期:");
                        cellValue = cell.getDateCellValue(); // cell.getDateCellValue() 返回Date类型数据
                    } else {
                        System.out.print("数字:");
                        cellValue = cell.getNumericCellValue();
                        System.out.println(1.0E50 == (Double) cellValue);
                    }
                    break;
                case FORMULA:
                    System.out.print("公式类型:");
                    cellValue = cell.getCellFormula();
                    break;
                case ERROR:
                    System.out.print("数据类型错误");
                    break;
            }
        } else {
            System.out.println("cell为空");
        }
        return cellValue;
    }

    // 测试
    public static void  main(String[] args) {
        try{
            JavaStudy.readExcel("D:\\codePojects\\Study\\src\\main\\resource\\example.xlsx");
        } catch (Exception e) {

        }
    }

}

补充说明

创建工作簿

POI创建工作簿的API有3种:

  • HSSFWorkbook: 此API用于操作Excel 2003及之前的版本(文件扩展名.xls),优点是导出速度快,缺点是导出的行数有局限性,最多为65535行,超出65536条后系统就会报错。对内存消耗比较大,容易造成内存溢出(OOM)。

  • XSSFWorkbook: 此API用于操作Excel 2007及往后的版本(文件扩展名.xlsx),优点是导出的数据行数突破65535,最大可导出1048576行,缺点导出速度慢,对内存消耗比较大,容易造成内存溢出(OOM)。

  • SXSSFWorkbook:POI3.8开始,新增此API,是 XSSFWorkbook API的兼容流式扩展,主要解决当使用 XSSFWorkbook 方式导出大数据量时,内存溢出的问题,支持导出大量的数据。其原理就是使用硬盘空间代替内存:仅保存最新的数据行在内存里供查看,在此之前的数据行都会被写入到硬盘里(Windows电脑的话,是写入到C盘根目录下的temp文件夹)。被写入到硬盘里的数据行是不可见的/不可访问的。只有还保存在内存里的才可以被访问到。

XSSFWorkbook API为例,可以通过多种方式来创建工作簿,常见用法如下:

//获取文件流
FileInputStream inputStream = new FileInputStream(excelFilePath);
//创建工作簿
Workbook workbook = new XSSFWorkbook(inputStream);

// 或者
//创建文件
File file = new File(excelFilePath);
Workbook workbook = new XSSFWorkbook(file);

// 或者
Workbook workbook = new XSSFWorkbook(excelFilePath);
获取单元格类型
CellType getCellType();

返回类型为CellType,在org.apache.poi.ss.usermodel.CellType中定义,它是一个枚举类型,源码如下:

public enum CellType {
    @Internal(
        since = "POI 3.15 beta 3"
    )
    _NONE(-1),
    NUMERIC(0), // // 数字(整数、小数、日期)
    STRING(1),
    FORMULA(2), // 公式,即单元格内容通过公式计算出来
    BLANK(3), // 为空//什么时候会存储空值,取决于所使用的表格软件
    BOOLEAN(4),
    ERROR(5);

写入Excel

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;

public class JavaStudy {
    public static void writeExcel(String filePath) throws IOException {
        Workbook workbook = new XSSFWorkbook();
//        Sheet sheet =  workbook.createSheet();
        Sheet sheet = workbook.createSheet("study"); // 创建Sheet时指定Sheet名词
        Row row = sheet.createRow(0);  // 创建第1行
        Cell firstCell = row.createCell(0); // 创建第1个单元格
        firstCell.setCellValue("hello");  // 设置单元格的值
        Cell secondCell = row.createCell(1); // 创建第2个单元格
        secondCell.setCellValue("shouke");

        row = sheet.createRow(1);   // 创建第2行
        firstCell = row.createCell(0, CellType.STRING);  // 设置单元格的值和类型
        firstCell.setCellValue("你好");
        secondCell = row.createCell(1, CellType.NUMERIC); // 创建第2个单元格
        secondCell.setCellValue(2023);


        FileOutputStream fileOutputStream = new FileOutputStream(filePath); // 如果文件已存在,则覆盖已有文件
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        workbook.close();
    }

    // 测试
    public static void  main(String[] args) {
        try{
            JavaStudy.writeExcel("D:\\codePojects\\Study\\src\\main\\resource\\result.xlsx");
        } catch (Exception e) {

        }
    }

}

生成Excel文件内容如下:

Java 基于Apache POI实现Excel读写操作文章来源地址https://www.toymoban.com/news/detail-616166.html

到了这里,关于Java 基于Apache POI实现Excel读写操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Apache-POI读写excel文件

    ApachePOI是用Java编写的免费开源的跨平台的JavaAPI,ApachePOI提供API给Java程序对MicrosoftOffice格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。 依赖导入: 针对不同的文档形式来操作的时候会提供相应的一些类 HSSF - 提供读写Microsoft Excel XLS格式档案的功能 XSSF -

    2024年02月05日
    浏览(24)
  • Apache POI操作Excel文件

            Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用 POI操作Excel文件 。 POI结构: 我们使用:XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能 POI操作Excel表格封装了几个核心

    2024年02月10日
    浏览(55)
  • Apache POI 操作Excel常用方法

    一、Java使用Apache POI导出excel 二、Apache POI 操作Excel常用方法 三、Apache poi 拆分单元格并赋值 四、使用easypoi模板方法导出excel 五、Apache poi给excel单元格添加下拉框或数据验证 POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。 HSSF:Excel97-2003版本,扩展名为.xls。一个sheet最大行数6

    2024年02月09日
    浏览(43)
  • 使用POI实现JAVA操作Excel文件

    https://poi.apache.org/components/index.html xls最大支持65536行、256列 xlsx最大支持1048576行、16384列 poi 操作xls poi-ooml操作xlsx 优点:过程中写入缓存,不操作磁盘,最后再一次性导入磁盘,速度快+ 缺点:但是只能写入65535条数据,超过就会报异常 优点:可以写较大数据量(超过655135条)

    2024年02月14日
    浏览(30)
  • hutool poi、apache poi实现导入导出以及解析excel

    一、前言 看了例子之后后续需要更加深入学习或者更多理解其他API的话,建议看官方文档。hutool项目是中国人维护的,有中文文档,阅读起来很方便。apache poi比较底层一点,可以更加自由去二次开发自己所需的功能。 hutool官方文档 hutool官方gitee apache poi官方文档 二、基于

    2024年02月09日
    浏览(39)
  • Apache Poi 实现Excel多级联动下拉框

    由于最近做的功能,需要将接口返回的数据列表,输出到excel中,以供后续导入,且网上现有的封装,使用起来都较为麻烦,故参考已有做法封装了工具类。 使用apache poi实现excel联动下拉框思路 创建隐藏单元格,存储下拉数据 创建名称管理器 使用indirect表达式进行联动 添加

    2024年02月11日
    浏览(25)
  • Apache POI实现Excel导入读取数据和写入数据并导出

    Apache POI POI介绍 Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件。 maven坐标: POI结构: 入门案例 ExcelTest .java文件 从Excel文件读取数据

    2024年02月12日
    浏览(31)
  • JAVA操作Excel之POI

    POI提供API给JAVA程序对Microsoft Office格式档案读和写的功能 基本功能如下: HSSF – 提供读写Excel格式(03)xls文件 XSSF – 提供读写Excel OOXML格式(07)xlsx文件 HWPF – 提供读写Word格式 HSLF – 提供读写PowerPoint格式 HDGF – 提供读写Visio格式 【注】03版本最多65535行,07版本的没有限制

    2024年02月06日
    浏览(23)
  • Apache POI 导出Excel报表

    大家好我是苏麟 , 今天聊聊Apache POI . 介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下,POI 都是用于操作 Excel 文件。 官网 : Apache POI - the Java API for Microsoft Do

    2024年01月17日
    浏览(32)
  • Apache POI 以及 导出Excel表

    Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下,POI 都是用于操作 Excel 文件。 导依赖 将数据写入Excel文件 读取Excel文件数据 学习

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包