目录

  • 一、POI 组件介绍
  • 二、XSSFWorkbook 详解
  • 三、XSSFSheet详解
  • 四、XSSFRow详解
  • 五、XSSFCell 详解
  • 六、总结(就是字典,不用看)


POI (Poor Obfuscation Implementation) 是一个 Java 库,用于处理 Microsoft Office文档,如Excel、Word和PowerPoint。它提供了一组类和方法,使开发人员能够读取、创建和修改这些文档,以及从中提取数据。
poor: 可怜,糟糕
pbfuscation:困惑,模糊,昏迷
implementation:实现

一、POI 组件介绍

POI 主要包括以下几个组件:
HSSF(Horrible Spreadsheet Format):即“讨厌的电子表格格式”HSSF 是 POI 的子项目,用于处理 Excel 97-2003 格式(.xls 文件)。它允许您读取、创建和修改 Excel 文档,包括工作簿、工作表、单元格、公式等。

XSSF(XML Spreadsheet Format):XSSF 是 POI 的子项目,用于处理 Excel 2007及更高版本的 XLSX 格式(基于XML的文件格式)。它支持读取和写入 XLSX 文件,并提供了对新 Excel 特性的支持。

HWPF(Horrible Word Processor Format):HWPF 是 POI 的子项目,用于处理 Word 97-2003 格式的文档(.doc 文件)。它允许您读取、创建和修改 Word 文档,包括文本、表格、图像等。

XWPF(XML Word Processor Format):XWPF 是 POI 的子项目,用于处理 Word 2007 及更高版本的 DOCX 格式(基于XML的文件格式)。它支持读取和写入 DOCX 文件,包括文本、样式、表格等。

HSLF(Horrible Slide Layout Format):HSLF 是 POI 的子项目,用于处理 PowerPoint 97-2003 格式的演示文稿(.ppt 文件)。它允许您读取、创建和修改 PowerPoint 文档,包括幻灯片、文本、图形等。

XSLF(XML Slide Layout Format):XSLF 是 POI 的子项目,用于处理 PowerPoint 2007 及更高版本的 PPTX 格式(基于XML的文件格式)。它支持读取和写入 PPTX 文件,包括幻灯片、文本、图形等。

二、XSSFWorkbook 详解

XSSFWorkbook 是 Apache POI 库中用于操作 Excel 2007及更高版本(.xlsx 格式)文档的类。它是 org.apache.poi.xssf.usermodel.XSSFWorkbook 类的一个实现。XSSFWorkbook 提供了许多方法,用于创建、修改和操作 Excel 工作簿,包括工作表、单元格、样式等。以下是一些常用的 XSSFWorkbook 方法的详解:
构造函数:

  • XSSFWorkbook():创建一个新的空白工作簿。
  • XSSFWorkbook(InputStream is):从输入流加载现有的工作簿。(项目用到)
  • XSSFWorkbook(String path):从指定文件路径加载现有的工作簿。
  • XSSFWorkbook(OPCPackage pkg):使用 OPCPackage 对象创建工作簿,这通常用于高级用途。

点击源码看构造XSSFWorkbook(InputStream is),看到头晕
调用PackageHelper,PackageHelper再调用OPCPackage的open(这里open除了InputStream还有File类型,我们看看简单的压缩文件),
这里的open调用子类new ZipPackage类(public final class ZipPackage extends OPCPackage),下面看不懂了

OPC:open packaging convention,开放的打包约定

下面有package,Parts,Part Addressing,Relationships等

java给Excel表格添加水印背景_java给Excel表格添加水印背景


java给Excel表格添加水印背景_apache_02


java给Excel表格添加水印背景_excel_03

插曲开始:一个OPCPackage压缩文件(下面的静态open方法)下面压缩demo用到这个方法

java给Excel表格添加水印背景_java_04


压缩demo

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;

import java.io.*;
import java.util.zip.*;

public class FileCompressor {
    public static void compressFiles(String[] filePaths, String outputFilePath) throws IOException {
        OPCPackage opcPackage = null;
        try {
            opcPackage = OPCPackage.open(new File(outputFilePath), PackageAccess.READ_WRITE);
            ZipPackage zipPackage = (ZipPackage) opcPackage;

            for (String filePath : filePaths) {
                File file = new File(filePath);
                FileInputStream fis = new FileInputStream(file);
                String entryName = file.getName();
                zipPackage.addZipEntry(entryName, fis);
                fis.close();
            }
        } catch (InvalidFormatException e) {
            e.printStackTrace();
        } finally {
            if (opcPackage != null) {
                opcPackage.close();
            }
        }
    }
}

在上述代码中,我们首先打开一个OPCPackage对象,该对象是POI库用来处理Office Open XML文件格式的核心类。然后,我们将OPCPackage对象转换为ZipPackage对象,以便于我们向压缩文件中添加文件。接下来,我们循环遍历传入的文件路径数组,并逐个添加文件到压缩文件中。最后,我们关闭OPCPackage对象。通过上述代码,我们可以将指定的文件压缩成一个文件。
插曲结束

创建工作表:

  • XSSFSheet createSheet(String sheetName):创建一个新的工作表,并指定工作表的名称。
  • XSSFSheet getSheetAt(int index):通过索引获取工作表。
  • XSSFSheet getSheet(String name):通过名称获取工作表。
    工作表操作:
  • int getNumberOfSheets():获取工作簿中的工作表数量。
  • void removeSheetAt(int index):删除指定索引处的工作表。
  • XSSFSheet cloneSheet(int sheetIndex):克隆工作表。
    保存工作簿:
  • void write(OutputStream out):将工作簿内容写入输出流,通常用于将工作簿保存到文件。(项目用到)
  • void write(File file):将工作簿内容写入指定的文件。
  • void close():关闭工作簿,释放资源。(项目调用完write,就调用这个)
    样式和格式:
  • XSSFCellStyle createCellStyle():创建一个新的单元格样式。
  • XSSFFont createFont():创建一个新的字体对象。
  • short createDataFormat():创建一个新的数据格式
    日期处理
  • void setCreationHelper(CreationHelper createHelper):设置工作簿的 CreationHelper,用于日期处理和其他数据类型的转换。
    密码保护:
  • void lockStructure():锁定工作簿的结构,防止用户对工作表的结构进行更改。
  • void unlockStructure():解锁工作簿的结构,允许用户对工作表的结构进行更改。

其他:

  • int getActiveSheetIndex():获取当前活动工作表的索引。
  • void setActiveSheet(int sheetIndex):设置当前活动工作表的索引。
  • XSSFFormulaEvaluator getCreationHelper().createFormulaEvaluator():用于计算公式的创建和计算器。

三、XSSFSheet详解

XSSFSheet 是 Apache POI 中用于表示 Excel 工作表的类,通常用于对 Excel 表格的数据进行读取和修改。XSSFSheet 类是 org.apache.poi.xssf.usermodel.XSSFSheet 的实现。以下是一些常用的 XSSFSheet 类的方法和属性

属性和基本信息:

  • int getPhysicalNumberOfRows(): 获取工作表中的物理行数,即非空行的数量。
  • int getFirstRowNum(): 获取第一个行的索引,通常为0。
  • int getLastRowNum(): 获取最后一个行的索引。
  • String getSheetName(): 获取工作表的名称。

行操作:

  • XSSFRow createRow(int rowIndex): 创建一个新的行,指定行的索引。
  • XSSFRow getRow(int rowIndex): 获取工作表中指定行索引的行对象。
  • void removeRow(XSSFRow row): 从工作表中删除指定的行。
  • void shiftRows(int startRow, int endRow, int n):向下或向上移动工作表中的行
    列操作:
  • int getColumnWidth(int columnIndex): 获取指定列的宽度。
  • void setColumnWidth(int columnIndex, int width): 设置指定列的宽度。
    工作表的属性:
  • boolean getDisplayFormulas(): 获取是否显示公式。
  • void setDisplayFormulas(boolean show):设置是否显示公式。
    合并单元格:
  • XSSFSheet或者HSSFSheet都有 int getNumMergedRegions():获取合并单元格个数(项目用到)-------------这个方法不在sheet这里
  • XSSFSheet或者HSSFSheet都有 public CellRangeAddress getMergedRegion(int index):获取具体那个下标的单元格信息(项目用到)----------这个方法不在sheet这里
  • public CTMergeCells getMergeCells():不知道干啥的,只知道CTMergeCells这里有合并单元格信息
  • void addMergedRegion(CellRangeAddress region): 合并单元格区域。
  • void addMergedRegionUnsafe(CellRangeAddress region): 合并单元格区域(不检查冲突)。
  • void removeMergedRegion(int index): 移除合并单元格区域。
    保护工作表:
  • void protectSheet(String password): 保护工作表并设置密码。
  • void unprotectSheet(String password): 取消保护工作表,需要提供正确的密码
    页眉和页脚:
  • Header getHeader(): 获取工作表的页眉。
  • Footer getFooter(): 获取工作表的页脚。
    注释:
  • XSSFRichTextString getSheetComment(): 获取工作表的注释。
  • void setSheetComment(XSSFRichTextString comment): 设置工作表的注释。
    图表:
  • XSSFDrawing createDrawingPatriarch(): 创建绘图对象,用于插入图表和图形。
    数据有效性:
  • XSSFDataValidationHelper getDataValidationHelper(): 获取数据有效性帮助器,用于创建数据有效性约束
    打印设置:
  • void setPrintArea(int startColumn, int endColumn, int startRow, int endRow): 设置要打印的区域。
    其它方法:
  • boolean isSelected(): 检查工作表是否被选中。
  • void setSelected(boolean select): 设置工作表是否被选中。

四、XSSFRow详解

XSSFRow 是 Apache POI 中用于表示 Excel 工作表中的行的类,通常用于对 Excel 表格的数据进行读取和修改。XSSFRow 类是 org.apache.poi.xssf.usermodel.XSSFRow 的实现。下面是一些常用的 XSSFRow 类的方法和属性:
属性和基本信息

  • int getRowNum(): 获取行的索引,从0开始。
  • int getPhysicalNumberOfCells(): 获取该行的物理单元格数量,即非空单元格的数量
    单元格操作:
  • XSSFCell createCell(int columnIndex): 创建一个新的单元格,指定单元格在行中的列索引。
  • XSSFCell getCell(int columnIndex): 获取行中指定列索引的单元格。
  • void removeCell(XSSFCell cell): 从行中删除指定的单元格。
  • int getFirstCellNum(): 获取第一个单元格的列索引。
  • int getLastCellNum(): 获取最后一个单元格的列索引,包括空单元格

设置行高和默认列宽:

  • void setHeight(short height): 设置行的高度(以20分之1个点为单位)。
  • void setZeroHeight(boolean zHeight): 设置行是否为零高度(隐藏行)
    其它方法:
  • void shiftCellsRight(int firstCellNum, int lastCellNum, int step): 将行中指定范围内的单元格向右移动。
  • void shiftCellsLeft(int firstCellNum, int lastCellNum, int step): 将行中指定范围内的单元格向左移动。
  • void shiftCellsRight(int firstCellNum, int lastCellNum): 将行中指定范围内的单元格向右移动一个位置。
  • void shiftCellsLeft(int firstCellNum, int lastCellNum): 将行中指定范围内的单元格向左移动一个位置

五、XSSFCell 详解

XSSFCell 是 Apache POI 中用于表示 Excel 工作表中单元格的类,通常用于读取和修改 Excel 表格中的数据。XSSFCell 类是 org.apache.poi.xssf.usermodel.XSSFCell 的实现。以下是一些常用的 XSSFCell 类的方法和属性:

获取单元格的内容:

  • String getStringCellValue(): 获取单元格中的文本值,无论单元格中的内容是文本、数字、日期或其他数据类型,都会以字符串形式返回。
  • double getNumericCellValue(): 获取单元格中的数值(仅适用于数值类型的单元格)。
  • boolean getBooleanCellValue(): 获取单元格中的布尔值(仅适用于布尔类型的单元格)。
  • String getCellFormula(): 获取单元格中的公式。

设置单元格的内容:

  • void setCellValue(double value): 设置单元格的值为数值。
  • void setCellValue(String value): 设置单元格的值为文本。
  • void setCellValue(boolean value): 设置单元格的值为布尔值。
  • void setCellFormula(String formula): 设置单元格的公式

单元格样式:

  • XSSFCellStyle getCellStyle(): 获取单元格的样式对象,以便修改单元格的样式。
  • void setCellStyle(XSSFCellStyle style): 设置单元格的样式。

单元格类型和属性:

  • int getCellType(): 获取单元格的类型,返回常量值(CellType)。
  • boolean getBooleanCellValue(): 获取布尔类型的单元格值。
  • int getColumnIndex(): 获取单元格所在的列索引。

单元格注释:

  • XSSFRichTextString getRichStringCellValue(): 获取富文本字符串对象(支持格式化文本)。
  • XSSFRichTextString setCellValue(RichTextString value): 设置单元格的富文本字符串值。

单元格格式:

  • void setCellType(int cellType): 设置单元格的类型,可以是 CellType 常量之一。

日期格式:

  • void setCellStyle(CellStyle style): 设置单元格的日期格式。

公式计算:

  • void setCellType(CellType cellType): 设置单元格的类型,可以是 CellType 常量之一。
  • void setCellErrorValue(byte errorCode): 设置单元格的错误值。
    其它方法:
  • boolean isPartOfArrayFormulaGroup(): 检查单元格是否属于数组公式组。
  • void removeCellComment(): 移除单元格的注释。

六、总结(就是字典,不用看)