使用POI实现JAVA操作Excel文件

news/2024/10/17 18:14:06/

1、POI工具介绍

1.1、POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。

1.2、主要是运用其中读取和输出excel的功能。

1.3、POI官网地址:

https://poi.apache.org/components/index.html

2、POI可操作的文件类型

在这里插入图片描述

3、POI所需依赖

		<!--xls(03)--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><!--xlsx(07)--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>

4、xls和xlsx的区别

xls是excel03版本 xlsx是excel07版本

最大的区别是行列数不同

xls最大支持65536行、256列
xlsx最大支持1048576行、16384列

poi操作

poi 操作xls
poi-ooml操作xlsx

5、POI Excel 写 03(xls)和07(xlsx)版本方式

package poi;import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;/*** @author yw* @since 2022/11/20*/
public class ExcelWrite {public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";String PATH = "D:\\excel\\";/*** 写工作簿 03版本*/@Testpublic void Write03() throws Exception {//1.创建一个工作簿Workbook workbook = new HSSFWorkbook();//2.创建 一个工作表Sheet sheet = workbook.createSheet("工人表");//3.创建一行Row row1 = sheet.createRow(0);//4.创建一个单元格//(1,1)Cell cell1 = row1.createCell(0);cell1.setCellValue("工号");//(1,2)Cell cell2 = row1.createCell(1);cell2.setCellValue("日期");//创建第二行Row row2 = sheet.createRow(1);//(2,1)Cell cell21 = row2.createCell(0);cell21.setCellValue(001);//(2,2)Cell cell22 = row2.createCell(1);SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);String datetime = sdf.format(new Date());cell22.setCellValue(datetime);//生成一张表(IO流),03版本就是使用xls结尾FileOutputStream fos = new FileOutputStream(PATH + "工人表03.xls");//输出workbook.write(fos);//关闭流fos.close();System.out.println("文件生成完毕");}/*** 写工作簿 07版本*/@Testpublic void Write07() throws Exception {//1.创建一个工作簿Workbook workbook = new XSSFWorkbook();//2.创建 一个工作表Sheet sheet = workbook.createSheet("工人表");//3.创建一行Row row1 = sheet.createRow(0);//4.创建一个单元格//(1,1)Cell cell1 = row1.createCell(0);cell1.setCellValue("工号");//(1,2)Cell cell2 = row1.createCell(1);cell2.setCellValue("日期");//创建第二行Row row2 = sheet.createRow(1);//(2,1)Cell cell21 = row2.createCell(0);cell21.setCellValue(001);//(2,2)Cell cell22 = row2.createCell(1);SimpleDateFormat sdf = new SimpleDateFormat(DEFAULT_DATE_FORMAT);String datetime = sdf.format(new Date());cell22.setCellValue(datetime);//生成一张表(IO流),03版本就是使用xlsx结尾FileOutputStream fos = new FileOutputStream(PATH + "工人表07.xlsx");//输出workbook.write(fos);//关闭流fos.close();System.out.println("文件生成完毕");}
}

6、HSSF和XSSF写大文件的区别

6.1、使用HSSF写大文件

@Testpublic void Write03BigData() throws Exception{//时间long begin = System.currentTimeMillis();//1.创建一个工作簿Workbook workbook = new HSSFWorkbook();//2.创建一个表Sheet sheet = workbook.createSheet("sheet1");//写入数据for (int rowNum = 0;rowNum<65536;rowNum++){//3.创建行Row row = sheet.createRow(rowNum);for (int CellNum = 0;CellNum<10;CellNum++){Cell cell = row.createCell(CellNum);cell.setCellValue(CellNum);}}System.out.println("over");//获取io流FileOutputStream fos = new FileOutputStream(PATH+"Write03BigData.xlsx");//生成一张表workbook.write(fos);fos.close();long end = System.currentTimeMillis();System.out.println("耗时:"+(end-begin));}

在这里插入图片描述
优点:过程中写入缓存,不操作磁盘,最后再一次性导入磁盘,速度快+
缺点:但是只能写入65535条数据,超过就会报异常
在这里插入图片描述

6.2、使用XSSF写大文件

@Testpublic void Write07BigData() throws Exception{//时间long begin = System.currentTimeMillis();//1.创建一个工作簿Workbook workbook = new XSSFWorkbook();//2.创建一个表Sheet sheet = workbook.createSheet("sheet1");//写入数据for (int rowNum = 0;rowNum<1000000;rowNum++){//3.创建行Row row = sheet.createRow(rowNum);for (int CellNum = 0;CellNum<10;CellNum++){Cell cell = row.createCell(CellNum);cell.setCellValue(CellNum);}}System.out.println("over");//获取io流FileOutputStream fos = new FileOutputStream(PATH+"Write07BigData.xlsx");//生成一张表workbook.write(fos);fos.close();long end = System.currentTimeMillis();System.out.println("耗时:"+(end-begin));}

在这里插入图片描述

优点:可以写较大数据量(超过655135条),如10万条
缺点:写数据时,速度非常慢,非常消耗内存,也会容易发生内存溢出,如100万条的时候。

6.3、使用SXSS写大文件

@Testpublic void Write07BigDataS() throws Exception{//时间long begin = System.currentTimeMillis();//1.创建一个工作簿Workbook workbook = new SXSSFWorkbook(200);//2.创建一个表Sheet sheet = workbook.createSheet("sheet1");//写入数据for (int rowNum = 0;rowNum<1000000;rowNum++){//3.创建行Row row = sheet.createRow(rowNum);for (int CellNum = 0;CellNum<10;CellNum++){Cell cell = row.createCell(CellNum);cell.setCellValue(CellNum);}}System.out.println("over");//获取io流FileOutputStream fos = new FileOutputStream(PATH+"Write07BigDataS.xlsx");//生成一张表workbook.write(fos);fos.close();//清除临时文件((SXSSFWorkbook) workbook).dispose();long end = System.currentTimeMillis();System.out.println("耗时:"+(end-begin));}

在这里插入图片描述
优点:可以写超大数据量的,比如100万条,写数据速度更快,占用更少内存
注意:
1、过程中会产生临时文件,结束时需要注意清理
2、默认100条记录会保存在内存中,如果超过这个数据,则最前面的数据会被写入磁盘中
3、如果想自定义内存中的数量,则可以new SXSSFWorkbook(自定义数量)

SXSSFWorkbook-来至官方的解释︰实现"BigGridDemo"策略的流式XSSFWorkbook版本。这允许写入非常大的文件而不会耗尽内存,因为任何时候只有可配置的行部分被保存在内存中。


http://www.ppmy.cn/news/349533.html

相关文章

面试问题整理

第三家 1.负责的项目的开发人员人数&#xff1f;人员组成 2.说说java的数据类型 我说的list 、set 、map &#xff0c;面试官说这是接口&#xff0c;他说的是实现的类型 List 1. ArrayList&#xff1a; 特点&#xff1a;基于数组实现&#xff0c;支持动态扩容。元素的访…

【微服务】SpringBoot 插件化开发模式详细总结

目录 一、前言 1.1 使用插件的好处 1.1.1 模块解耦 1.1.2 提升扩展性和开放性 1.1.3 方便第三方接入 1.2 插件化常用实现思路 二、Java常用插件实现方案 2.1 serviceloader方式 2.1.1 java spi 2.1.2 java spi 简单案例 2.2 自定义配置约定方式 2.2.1 添加配置文件…

【大学计算机技术】第一章 测试19

文章目录 选择题 选择题 20多年来微处理器的发展非常迅速&#xff0c;下面关于微处理器发展的叙述不准确的是( )。 A. 微处理器中包含的晶体管越来越多&#xff0c;功能越来越强大 B. 微处理器中Cache的容量越来越大 C. 微处理器的指令系统越来越简单规整 D. 微处理器的性能价格…

云计算机专用显示器,华为云电脑+5G,你真的需要一款便携显示器!

移动互联网时代&#xff0c;手机办公已经成为越来越多人的需求。但是由于手机屏幕太小&#xff0c;部分功能操作有所限制&#xff0c;对于复杂的表格处理、PPT制作或处理多任务时&#xff0c;手机办公还是很难满足人们需求。 5G时代来临 即将到来的5G云服务时代&#xff0c;网络…

加速数字化转型,通过零代码ETL工具实现吉客云数据自动化同步

一、吉客云系统介绍 吉客云是一家SaaS企业服务提供商&#xff0c;主要提供企业级应用服务。吉客云的服务范围涵盖了企业级推广、企业级智能客服、企业级销售管理、企业级客户关系管理、企业级电子商务等方面的服务&#xff0c;并且提供了基于AI技术的解决方案。其目标是通过数…

计算机的神奇功能华为,图说华为MateBook X,这是一款神奇的笔记本电脑

随着互联网的快速发展&#xff0c;移动办公已经成为了人们的一种生活方式&#xff0c;因此大家对于笔记本电脑的要求相比一样也要高了很多&#xff0c;机身更轻薄一些、性能更强一些、最好还能有一些创新的体验&#xff0c;为我们的移动办公进一步带来便利。这些需求放在以往可…

华为发布Matebook系列笔记本+平板 外观堪比MacBook

华为不仅是手机、平板电脑和智能手表制造商&#xff0c;如今它也成为笔记本电脑制造商了。 该公司推出了两款全新笔记本电脑Matebook X和Matebook D&#xff0c;同时还发布了去年该公司推出的Windows 10平板电脑的升级版——Matebook E。有点混乱&#xff0c;对吧&#xff1f;…

华为电脑wrtw29安装Linux,Huawei/华为笔记本MateBook 13 WRT-W19怎么样,华为13寸笔记本电脑配置性能评测!...

2018款新品Huawei/华为 MateBook 13 WRT-W19笔记本电脑推荐&#xff1a;华为笔记本MateBook 13 WRT-W19 全面屏&#xff0c;13英寸&#xff0c; i7版本预定8号后发货 买赠扩展坞双肩包&#xff0c;CPU 英特尔 酷睿 i5-8265U或英特尔 酷睿 i7-8550U&#xff0c;显存容量2GB&…