其他分享
首页 > 其他分享> > Apache POI - 浅学习笔记

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