POI (Poor Obfuscation Implementation) 是一个 Java 库,用于处理 Microsoft Office文档,如Excel、Word和PowerPoint。它提供了一组类和方法,使开发人员能够读取、创建和修改这些文档,以及从中提取数据。


一、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 文件,包括幻灯片、文本、图形等。


使用 POI,您可以执行各种操作,如读取 Excel 文件中的数据、将数据写入 Excel 文件、操作 Word 文档的内容和格式、创建 PowerPoint 演示文稿等。它是一个强大的工具,特别适合需要自动化处理 Office 文档的 Java 应用程序。


使用 POI 的简单示例,用于读取 Excel 文件中的数据:


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

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

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

public class ExcelReader {

   public static void main(String[] args) {

       try {

           FileInputStream file = new FileInputStream(new File("example.xlsx"));

           Workbook workbook = new XSSFWorkbook(file);

           Sheet sheet = workbook.getSheetAt(0);

           for (Row row : sheet) {

               for (Cell cell : row) {

                   System.out.print(cell.toString() + "\t");

               }

               System.out.println();

           }

           file.close();

       } catch (IOException e) {

           e.printStackTrace();

       }

   }

}


二、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 对象创建工作簿,这通常用于高级用途。

创建工作表:


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():关闭工作簿,释放资源。

样式和格式:


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):设置是否显示公式。


合并单元格:


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): 将行中指定范围内的单元格向左移动一个位置。