Apache POI

Posted 小林さん

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache POI相关的知识,希望对你有一定的参考价值。

Apache POI

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

操作Excel目前比较流行的就是Apache POI和阿里巴巴的easyExcel

使用场景

1.将用户信息导出为excel表格(导出数据)

2.将Excel表中的信息录入到网站数据库(上传)

基本功能

结构:

HSSF - 提供读写[Microsoft Excel](https://baike.baidu.com/item/Microsoft Excel)格式档案的功能。

XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。

HWPF - 提供读写[Microsoft Word](https://baike.baidu.com/item/Microsoft Word)格式档案的功能。

HSLF - 提供读写Microsoft PowerPoint格式档案的功能。

HDGF - 提供读写[Microsoft Visio](https://baike.baidu.com/item/Microsoft Visio)格式档案的功能。

导入依赖

 			<!-- 操作xls后缀的excel -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>4.0.1</version>
            </dependency>

            <!-- 操作xlsx后缀的excel -->
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>4.0.1</version>
            </dependency>

xls和xlsx的区别

xls最多65536条数据

xlsx可以存放无限条数据

Excel的结构

1.工作簿 2.工作表 3.行 4.列

代码

package com.licha;

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.streaming.SXSSFWorkbook;

import java.io.FileOutputStream;

/**
 * User: Aurora
 * Date: 2020/5/2
 * Time: 16:22
 *	写入数据
 */
public class ExcelWriteTest {
    public static void main(String[] args) throws Exception {
        /**
         *  1.创建一个工作簿
         *  HSSFWorkbook 创建xls版本的
         *  SXSSFWorkbook  创建xlsx版本的
         *  XSSFWorkbook  可以写较大量的数据,但是速度慢,非常耗内存,会发生内存溢出
         */
        Workbook workbook = new SXSSFWorkbook();
        //2.创建一个工作表
        Sheet sheet = workbook.createSheet("员工表");
        //3.创建一行
        Row row1 = sheet.createRow(0);
        Row row2 = sheet.createRow(1);
        //4.创建一列
        Cell cell11 = row1.createCell(0);
        Cell cell12 = row1.createCell(1);
        Cell cell21 = row2.createCell(0);
        Cell cell22 = row2.createCell(1);

        cell11.setCellValue("姓名");
        cell12.setCellValue("张顺爬");
        cell21.setCellValue("年龄");
        cell22.setCellValue("22");

        //5.生成表
        String path = "D:\\\\javaObj\\\\POI-EasyExcel";
        FileOutputStream fileOutputStream = new FileOutputStream(path + "\\\\员工统计表.xlsx");
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        System.out.println("excel生成完毕");

    }
}

package com.licha;

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 java.io.FileInputStream;

/**
 * User: Aurora
 * Date: 2020/5/2
 * Time: 21:29
 */
public class ExcelReadTest {
    public static void main(String[] args) throws Exception{
        String path = "D:\\\\javaObj\\\\POI-EasyExcel";
        //1.读取excel信息
        FileInputStream fileInputStream = new FileInputStream(path + "\\\\员工统计表.xlsx");
        Workbook workbook =  new XSSFWorkbook(fileInputStream);
        //2.读取表信息
        Sheet sheet = workbook.getSheet("员工表");
        //3.取得行信息
        Row row1 = sheet.getRow(0);
        //4.取得列信息
        Cell cell11 = row1.getCell(0);

        System.out.println(cell11.getStringCellValue());
        //取得当前行有多少列
        System.out.println(row1.getPhysicalNumberOfCells());
        //取得当前表有多少行
        System.out.println(sheet.getPhysicalNumberOfRows());
        //取得当前格的类型
        System.out.println(cell11.getCellType());
    }
}

以上是关于Apache POI的主要内容,如果未能解决你的问题,请参考以下文章

java 通过Apache poi导出excel代码demo实例

读取word文档,暂时不能读取图片,案例代码

谁能给我一个详细的Java通过Apache POI导出Excel方法,最好能给完整代码

org.apache.poi版本问题

apache poi根据模板导出excel

如何使用 Apache POI 和 Java 代码检查 Excel 文件中是不是存在信息