提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。
一般情况下,POI 都是用于操作 Excel 文件。
Apache POI组件列表如下:
代码如下(示例):
<!-- 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>
https://poi.apache.org/download.html
这是创建或维护 Excel 工作簿的所有类的超级接口。 它属于 org.apache.poi.ss.usermodel 包。 实现这个接口的两个类如下 :
HSSFWorkbook − 此类具有读取和写入 .xls 格式的 Microsoft Excel 文件的方法。 它与 MS-Office 版本 97-2003 兼容。
XSSFWorkbook − 此类具有读取和写入 .xls 或 .xlsx 格式的 Microsoft Excel 和 OpenOffice xml 文件的方法。 它与 MS-Office 2007 或更高版本兼容。
它是 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 存储在内存中(如果已设置)。
它是一个用于表示高级和低级 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 是 org.apache.poi.ss.usermodel 包下的一个接口,它是创建具有特定名称的高级或低级电子表格的所有类的超级接口。 最常见的电子表格类型是工作表,它表示为单元格网格。
这是 org.apache.poi.hssf.usermodel 包下的一个类。创建.xls格式, 它可以创建 excel 电子表格,并允许格式化工作表样式和工作表数据。
类构造函数 | 描述 |
---|---|
HSSFSheet(HSSFWorkbook workbook) | 创建由 HSSFWorkbook 调用的新 HSSFSheet 以从头开始创建工作表。 |
HSSFSheet(HSSFWorkbook workbook, InternalSheet sheet) | 创建一个表示给定工作表对象的 HSSFSheet |
这是一个代表 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) | 注册超链接的集合中的超链接此工作表格上 |
这是在org.apache.poi.xssf.usermodel包的类。它实现了Row接口,因此它可以在电子表格中创建行。下面列出的是这个类在方法和构造函数。
类方法 | 描述 |
---|---|
createCell(int columnIndex) | 创建新单元行并返回。 |
对于此类的其余的方法,参考如下链接:
https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFRow.html
这是在 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) | 设置为单元格的字符串值。 |
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();
}
}
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();
}
}