Apache POI - 浅学习笔记
作者:互联网
1.POI介绍
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写
2.POI常用包简介
HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF - 提供读写Microsoft Word DOC格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读Microsoft Visio格式档案的功能。
HPBF - 提供读Microsoft Publisher格式档案的功能。
HSMF - 提供读Microsoft Outlook格式档案的功能。
3.如何使用?
在JAVA项目中,想要用到POI首先应该导入对应的包,这里就是用Maven的方式引入依赖来进行导入
<dependencies>
<!--xls-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<!--xlsx-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
4.常用字段及简单解释
Workbook 工作簿
当要使用POI来进行一次 读 或 写 的操作前,应当先创建一个Workbook,可以理解为一个预先的准备,就比如打算要写一篇小说,就应该先准备好本子一样。
Sheet 页
以Excel文档为例,这类的文档都有一个或多个的“页”,可以理解为,每一个“Sheet”,就是一个“页”
也就是说,每当我们需要一个新的“页”时,就可以new 一个Sheet来进行操作
Row 行
这里的Row可以理解为“行”,也可以理解为Excel里的Y轴(竖直方向)
上图中左侧的“33”,“34”,“35”.....等都是行数,也就是Row,可以通俗的这么理解。
Cell 单元格
Cell就是每一行里的格子,也可以理解为Excel里的X轴(横向)
比如,40行之后有许多的格子,那么每一个格子就是一个“Cell”.
写到这里其实应该有了模糊的认识,那就是Excel读写都是按照 文件 - Sheet(页) - Row(行) - Cell(单元格) 这个结构来操作的,那么读和写操作的话,也都是按照这个顺序去进行的。
以写操作为例
首先需要创建一个“工作簿(Workbook)”,以xlsx文件为例
Workbook workbook = new XSSFWorkbook();
这里就是创建出来了上面所说的“文件”,那么下面就该创建 Sheet
Sheet sheet1 = workbook.createSheet("sheet1");
Sheet是以文件为基础来进行创建的,那么之后的Row和Cell也是以上一层为基础来创建
Row row = sheet3.createRow(i);
这里的 “i”,对应的是“行数”,也就是说这个row对应的是第几行
Cell cell = row.createCell(i1);
这里的“i1” 同理,对应的是这一行(row)里的第几个单元格
通过这样的一个结构去创建,很容易就可以创建出来一个XY轴对应的表格,那么写数据等,也是这样去操作的,新增一行(row(新的行数)),新增一个单元格(在原有Row的基础上新增一个Cell(新的单元格))
这里以一串简单的代码示例
String path = "C:\\Users\\yans\\Desktop\\test.xlsx";
try {
Workbook workbook = new XSSFWorkbook();
//一共创建了三页
Sheet sheet1 = workbook.createSheet("sheet1");
Sheet sheet2 = workbook.createSheet("sheet2");
Sheet sheet3 = workbook.createSheet("sheet3");
for (int i = 0; i < 20; i++) {
//对第一页进行操作,新增i行
Row row = sheet1.createRow(i);
for (int i1 = 0; i1 < 20; i1++) {
//对i行进行操作,新增i1个单元格
Cell cell = row.createCell(i1);
//对当前的单元格写数据
cell.setCellValue("row:" + (i+1) + "- cell" + (i1+1));
}
}
try (FileOutputStream out = new FileOutputStream(path)){
workbook.write(out);
}catch (Exception e){
System.out.println(e);
}
}catch (Exception e){
System.out.println(e);
}
文件写出后就得到了一个表格
读操作也是同样的道理,这里就不做过多的赘述了
String path = "C:\\Users\\yans\\Desktop\\test.xlsx";
try (FileInputStream in = new FileInputStream(path)){
//以读取到的文件流来创建工作簿
Workbook workbook = new XSSFWorkbook(in);
//读取第一页
Sheet sheet = workbook.getSheetAt(0);
//读取名为"123"的页
// Sheet sheet = workbook.getSheet("123");
for (int i = 0; i < 20; i++) {
//读第i行
Row row = sheet.getRow(i);
for (int i1 = 0; i1 < 20; i1++) {
//读第i行的第i1个单元格的数据
Cell cell = row.getCell(i1);
//这里需要优先判断单元格内数据格式,这里以String类型为例
System.out.print(cell.getStringCellValue() + " | ");
}
System.out.println();
}
}catch (Exception e){
System.out.println(e);
}
只是在学习了POI后的简单理解,可能会有错误的地方,感谢指出。
标签:Sheet,i1,笔记,Cell,workbook,POI,Apache,Row,row 来源: https://www.cnblogs.com/yansink/p/16672029.html