ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Apache POI - 浅学习笔记

2022-09-09 11:02:34  阅读:258  来源: 互联网

标签:Sheet i1 笔记 Cell workbook POI Apache Row row


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有