【Apache POI】操作excel学习文档 看这一篇就够了

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

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

一、Apache POI组件

Apache POI组件列表如下:

  1. POIFS : 此组件是所有其他POI元件的基本因素。它被用来明确地读取不同的文件。
  2. HSSF : 它被用来读取和写入MS-Excel文件的xls格式。
  3. XSSF : 它是用于MS-Excel中XLSX文件格式。
  4. HPSF : 它用来提取MS-Office文件属性设置。
  5. HWPF : 它是用来读取和写入MS-Word的文档扩展名的文件。
  6. XWPF : 它是用来读取和写入MS-Word的docx扩展名的文件。
  7. HSLF : 它是用于读取,创建和编辑PowerPoint演示文稿。
  8. HDGF : 它包含类和方法为MS-Visio的二进制文件。
  9. HPBF : 它被用来读取和写入MS-Publisher文件。

二、Apache POI - 下载安装和环境设置

1.引入Maven依赖

代码如下(示例):

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
    <groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>5.0.0</version>
</dependency>

2.直接下载

https://poi.apache.org/download.html


三,Apache POI - 核心类

Workbook

这是创建或维护 Excel 工作簿的所有类的超级接口。 它属于 org.apache.poi.ss.usermodel 包。 实现这个接口的两个类如下 :

HSSFWorkbook − 此类具有读取和写入 .xls 格式的 Microsoft Excel 文件的方法。 它与 MS-Office 版本 97-2003 兼容。

XSSFWorkbook − 此类具有读取和写入 .xls 或 .xlsx 格式的 Microsoft Excel 和 OpenOffice xml 文件的方法。 它与 MS-Office 2007 或更高版本兼容。

HSSFWorkbook

它是 org.apache.poi.hssf.usermodel 包下的高级类。 它实现了 Workbook 接口,用于 .xls 格式的 Excel 文件。 下面列出了该类下的一些方法和构造函数。

类构造函数描述
HSSFWorkbook()从头开始创建一个新的 HSSFWorkbook 对象
HSSFWorkbook(DirectoryNode directory, boolean preserveNodes)在特定目录中创建一个新的 HSSFWworkbook 对象。
HSSFWorkbook(DirectoryNode directory, POIFSFileSystem fs, boolean preserveNodes)给定一个 POIFSFileSystem 对象和其中的特定目录,它会创建一个 SSFWorkbook 对象来读取指定的工作簿。
HSSFWorkbook(java.io.InputStream s)使用输入流创建一个新的 HSSFWorkbook 对象。
HSSFWorkbook(java.io.InputStream s, boolean preserveNodes)围绕输入流构建 POI 文件系统。
HSSFWorkbook(POIFSFileSystem fs)使用 POIFSFileSystem 对象构造一个新的 HSSFWorkbook 对象。
HSSFWorkbook(POIFSFileSystem fs, boolean preserveNodes)HSSFWorkbook(POIFSFileSystem fs, boolean preserveNodes)

directory − 它是要处理的 POI 文件系统目录。

fs − 它是包含工作簿流的 POI 文件系统。

preservenodes − 这是一个可选参数,决定是否保留其他节点,如宏。 它消耗大量内存,因为它将所有 POIFileSystem 存储在内存中(如果已设置)。

XSSFWorkbook

它是一个用于表示高级和低级 Excel 文件格式的类。 它属于 org.apache.xssf.usemodel 包,用于 .xlsx 格式的 Excel 文件,实现了 Workbook 接口。 下面列出了这个类下的方法和构造函数。

类构造函数描述
XSSFWorkbook()从头开始创建一个新的 XSSFworkbook 对象。
XSSFWorkbook(java.io.File file)从给定文件构造一个 XSSFWorkbook 对象。
XSSFWorkbook(java.io.InputStream is)构造一个 XSSFWorkbook 对象,方法是将整个输入流缓冲到内存中,然后为其打开一个 OPCPackage 对象。
XSSFWorkbook(java.lang.String path)在给定文件的完整路径的情况下构造一个 XSSFWorkbook 对象。
类方法描述
createSheet()为此工作簿创建一个 XSSFSheet,将其添加到工作表中,并返回高级表示。
createSheet(java.lang.String sheetname)为此工作簿创建一个新工作表并返回高级表示。
createFont()创建新字体并将其添加到工作簿的字体表中。
createCellStyle()创建一个新的 XSSFCellStyle 并将其添加到工作簿的样式表中
createFont()创建新字体并将其添加到工作簿的字体表中。
setPrintArea(int sheetIndex, int startColumn, int endColumn, int startRow,int endRow)根据指定参数设置给定工作表的打印区域。

对于这个类的其余方法,请参阅完整的 API 文档在 − [https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFWorkbook.html]获取方法的完整列表。

Sheet

Sheet 是 org.apache.poi.ss.usermodel 包下的一个接口,它是创建具有特定名称的高级或低级电子表格的所有类的超级接口。 最常见的电子表格类型是工作表,它表示为单元格网格。

HSSFSheet

这是 org.apache.poi.hssf.usermodel 包下的一个类。创建.xls格式, 它可以创建 excel 电子表格,并允许格式化工作表样式和工作表数据。

类构造函数描述
HSSFSheet(HSSFWorkbook workbook)创建由 HSSFWorkbook 调用的新 HSSFSheet 以从头开始创建工作表。
HSSFSheet(HSSFWorkbook workbook, InternalSheet sheet)创建一个表示给定工作表对象的 HSSFSheet

XSSFSheet

这是一个代表 excel 电子表格的高级表示的类。创建.xlsx格式, 它在 org.apache.poi.hssf.usermodel 包下。

类构造函数描述
XSSFSheet()创建新的 XSSFSheet − 由 XSSFWorkbook 调用以从头开始创建工作表。
XSSFSheet(PackagePart part, PackageRelationship rel)创建一个表示给定包部分和关系的 XSSFSheet。
类方法描述
addMergedRegion(CellRangeAddress region)添加单元的合并区域(因此这些单元格合并形成一个)。
autoSizeColumn(int column)调整列宽,以适应的内容。
iterator()此方法是用于rowIterator()的别名,以允许foreach循环
addHyperlink(XSSFHyperlink hyperlink)注册超链接的集合中的超链接此工作表格上

XSSFRow

这是在org.apache.poi.xssf.usermodel包的类。它实现了Row接口,因此它可以在电子表格中创建行。下面列出的是这个类在方法和构造函数。

类方法描述
createCell(int columnIndex)创建新单元行并返回。

对于此类的其余的方法,参考如下链接:
https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html

XSSFCell

这是在 org.apache.poi.xssf.usermodel 包的类。它实现了单元格界面。它代码一行中的单元格 也就是列。

类方法描述
setCellStyle(CellStyle style)为单元格设置样式。
setCellType(int cellType)设置单元格的类型(数字,公式或字符串)。
setCellValue(boolean value)设置单元格一个布尔值
setCellValue(java.util.Calendar value)设置一个日期值的单元格。
setCellValue(double value)设置为单元格的数值。
setCellValue(java.lang.String str)设置为单元格的字符串值。

四,入门案例

将数据写入Excel文件

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

public class POITest {

    /**
     * 基于POI向Excel文件写入数据
     * @throws Exception
     */
    public static void write() throws Exception{
        //在内存中创建一个Excel文件对象
        XSSFWorkbook excel = new XSSFWorkbook();
        //创建Sheet页
        XSSFSheet sheet = excel.createSheet("itcast");

        //在Sheet页中创建行,0表示第1行
        XSSFRow row1 = sheet.createRow(0);
        //创建单元格并在单元格中设置值,单元格编号也是从0开始,1表示第2个单元格
        row1.createCell(1).setCellValue("姓名");
        row1.createCell(2).setCellValue("城市");

        XSSFRow row2 = sheet.createRow(1);
        row2.createCell(1).setCellValue("张三");
        row2.createCell(2).setCellValue("北京");

        XSSFRow row3 = sheet.createRow(2);
        row3.createCell(1).setCellValue("李四");
        row3.createCell(2).setCellValue("上海");

        FileOutputStream out = new FileOutputStream(new File("D:\\itcast.xlsx"));
        //通过输出流将内存中的Excel文件写入到磁盘上
        excel.write(out);

        //关闭资源
        out.flush();
        out.close();
        excel.close();
    }
    public static void main(String[] args) throws Exception {
        write();
    }
}

读取Excel文件中的数据

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

public class POITest {
    /**
     * 基于POI读取Excel文件
     * @throws Exception
     */
    public static void read() throws Exception{
        FileInputStream in = new FileInputStream(new File("D:\\itcast.xlsx"));
        //通过输入流读取指定的Excel文件
        XSSFWorkbook excel = new XSSFWorkbook(in);
        //获取Excel文件的第1个Sheet页
        XSSFSheet sheet = excel.getSheetAt(0);

        //获取Sheet页中的最后一行的行号
        int lastRowNum = sheet.getLastRowNum();

        for (int i = 0; i <= lastRowNum; i++) {
            //获取Sheet页中的行
            XSSFRow titleRow = sheet.getRow(i);
            //获取行的第2个单元格
            XSSFCell cell1 = titleRow.getCell(1);
            //获取单元格中的文本内容
            String cellValue1 = cell1.getStringCellValue();
            //获取行的第3个单元格
            XSSFCell cell2 = titleRow.getCell(2);
            //获取单元格中的文本内容
            String cellValue2 = cell2.getStringCellValue();

            System.out.println(cellValue1 + " " +cellValue2);
        }

        //关闭资源
        in.close();
        excel.close();
    }

    public static void main(String[] args) throws Exception {
        read();
    }
}
  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

海海向前冲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值