快速上手 Apache-POI【操作微软office,主要是excel】
快速上手 Apache-POI【操作微软office,主要是excel】
文章目录
前言
提示:需要对面向对象思想有一定了解。
一、POI是什么?
Apache POI - the Java API for Microsoft Documents,顾名思义,Apache的三方包,用来操作微软office文档的,多数时候用来操作excel,所以这里就以excel方面来说明。
二、使用步骤
1.核心组件介绍
【描述】
POI的组件列表中,针对excel的主要是HSSF和XSSF组件,前者针对97-2007的通用版excel,即后缀xls;后者针对2007或更高版的excel,即后缀xlsx。
【官方描述】
HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format.
XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (.xlsx) file format.
2.引入依赖
需要引入两个包,maven地址如下:
代码如下(示例,version 3.9):
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
【maven 其他版本地址:https://mvnrepository.com/search?q=org.apache.poi】
3.核心类
表格如下(示例):
类名 | 描述 |
---|---|
Workbook | 工作簿超类 |
Sheet | 标签页超类 |
Row | 行超类 |
Cell | 单元格超类 |
3.1 工作簿类 Workbook
【描述】创建或维护Excel工作簿的所有类的超接口,Workbook,属于org.apache.poi.ss.usermodel包。其下有两个实现类:
- HSSFWorkbook:有读取【.xls】文件格式和写入Microsoft Excel文件的方式。它与微软OffIC侧97 -2003版本兼容
- XSSFWorkbook:有读写Microsoft Excel和Open Office 的xml文件的格式【.xls】或【.xlsx】的方法。它与MS-Office 版本2007或更高兼容。
- 注意:在使用时,请根据Excel版本进行选择。
HSSFWorkbook()
HSSFWorkbook(java.io.InputStream s)
XSSFWorkbook()
XSSFWorkbook(java.io.File file)
XSSFWorkbook(java.io.InputStream is)
3.2 标签页类 Sheet
【描述】HSSFSheet和XSSFSheet是Sheet的实现类,通过Workbook获取:
workbook.createSheet();
workbook.createSheet(String sheetName);
3.3 行类 Row
【描述】HSSFRow和XSSFRow是Row的实现类,通过Sheet方法获取:
sheet.createRow(int rownum); // 0~65535
3.4 单元格类 Cell
【描述】HSSFCell和XSSFCell类是Cell的实现类,通过Row的方法获取:
row.createCell(int column); // 0~255
row.createCell(int column, int type); // 0~255
4. 读取和创建
【思路】:首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook/XSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet/XSSFSHeet)组成,一个sheet是由多个row(HSSFRow/XSSFRow)组成,一个row是由多个cell(HSSFCell/XSSFCell)组成。
4.1 读取
【描述】读取当前路径下已经存在的【.xlsx】文件(因为使用的工作簿类是 XSSFWorkbook)
public static void main(String args[])throws Exception
{
File file = new File("openworkbook.xlsx");
FileInputStream fIP = new FileInputStream(file);
XSSFWorkbook workbook = new XSSFWorkbook(fIP);
if(file.isFile() && file.exists())
{
System.out.println(
"openworkbook.xlsx file open successfully.");
}
else
{
System.out.println(
"Error to open openworkbook.xlsx file.");
}
}
4.2 创建
【描述】创建一个学生成绩管理Excel文件到当前项目路径下,Excel数据如图4-2所示:
代码如下(示例):
/**
* 创建一个学生信息excel文件
*
* @param excelName excel标签页名称
* @date Created in 10:25 2020-12-29
* @vsersion v1
*/
public void createExcel(String excelName) {
try {
// 1.创建一个excel工作簿对象
HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
// 2.创建一个excel工作页对象(一个工作簿有多个工作页)
HSSFSheet sheet = hssfWorkbook.createSheet("学生信息"); //当前写死, excelName外部传入
// 3.创建excel第一行对象
HSSFRow row1 = sheet.createRow(0);
// 4.创建excel第一行单元格对象
HSSFCell cell1 = row1.createCell(0);
// 设置单元格内容
cell1.setCellValue("学员考试成绩一览表");
// 合并单元格
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));
// 学生主体信息
// 1.主体头部信息
HSSFRow row2 = sheet.createRow(1);
row2.createCell(0).setCellValue("姓名");
row2.createCell(1).setCellValue("班级");
row2.createCell(2).setCellValue("笔试成绩");
row2.createCell(3).setCellValue("机试成绩");
// 2.学生信息
HSSFRow row3 = sheet.createRow(2);
row3.createCell(0).setCellValue("李明");
row3.createCell(1).setCellValue("As178");
row3.createCell(2).setCellValue("87");
row3.createCell(3).setCellValue("78");
HSSFRow row4 = sheet.createRow(3);
row4.createCell(0).setCellValue("张飞");
row4.createCell(1).setCellValue("As255");
row4.createCell(2).setCellValue("78");
row4.createCell(3).setCellValue("90");
HSSFRow row5 = sheet.createRow(4);
row5.createCell(0).setCellValue("王菲");
row5.createCell(1).setCellValue("As336");
row5.createCell(2).setCellValue("82");
row5.createCell(3).setCellValue("69");
// 使用字节输出流,输入excel文件
FileOutputStream out = new FileOutputStream(new File(excelName + ".xls"));
hssfWorkbook.write(out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
总结
需要进行,单元格样式操作,如【合并单元格、颜色、字体】等时,请看这里:
【说明】这个是转载的
https://blog.csdn.net/ethan_10/article/details/80335350
本文地址:https://blog.csdn.net/weixin_42045234/article/details/111921323