使用poi操作excel详解

  • 1、POI工具介绍
  • 2、POI可操作的文件类型
  • 3、POI所需依赖
  • 4、xls和xlsx的区别
  • 5、POI Excel 写 03(xls)和07(xlsx)版本方式
  • 6、HSSF和XSSF写大文件的区别
    • 6.1、使用HSSF写大文件
    • 6.2、使用XSSF写大文件
    • 6.3、使用SXSS写大文件

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 操作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版本。这允许写入非常大的文件而不会耗尽内存,因为任何时候只有可配置的行部分被保存在内存中。

使用poi操作excel详解相关推荐

  1. 【转】用VB操作Excel详解

    用VB操作Excel详解 一. VB读写EXCEL表: VB本身提自动化功能可以读写EXCEL表,其方法如下: 1.在工程中引用MicrosoftExcel 类型库: 从"工程"菜 ...

  2. java中使用poi导出Excel详解,kotlin音标

    到这个问题,可以设置encoding为双字节.POI可以到www.apache.org下载到. 编译好的jar主要有这样4个:poi包, poi Browser包, poi hdf包, poi hss ...

  3. python excel详解_python操作excel详解

    前提: python操作excel需要使用的模块有xlrd.xlwt.xlutils.对excel进行读.写.更新操作.操作excel时需要先导入这些模块,demo如下: excel-读操作知识点: ...

  4. poi导出excel详解

    创建模板-------放到maven工程-----sec/main/resources/model目录下 第一步:在maven中导入poi 依赖 第二步:controller层 /*** 体检对账对账 ...

  5. OLE 操作Excel 详解(转)

    使用Excel模板进行报表的开发. 今年搞的Excel比较多,总结了一下,相信常用的操作包含的差不多了. 可以首先定义一个无内容的Excel报表模板文件. 通过Tcode SMW0 上传至SAP数据库 ...

  6. [Python从零到壹] 八.数据库之MySQL和Sqlite基础知识及操作万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. .NET NPOI导出Excel详解

    http://www.cnblogs.com/yinrq/p/5590970.html .NET NPOI导出Excel详解 NPOI,顾名思义,就是POI的.NET版本.那POI又是什么呢?POI是 ...

  8. Java使用poi操作excel注意事项

    Java使用poi操作excel注意事项 1.如果只需要获取sheet信息,用流模式打开文件即可获取,消耗内存少 2.上传的文件需要校验,防止Excel包含异常的缓存文件,缓存文件可能会有几百兆,会瞬 ...

  9. C#NPOI导出Excel详解

    C#NPOI导出Excel详解 开发工具与技术:工具:Visual Studio/C#.Net,技术:C# 作者:刘胜 撰写时间:2019-05-08 NPOI简介 NOP是一个开源的C#读写Exce ...

最新文章

  1. Statues CodeForces - 129C(bfs)
  2. SAP Spartacus UsersSelectors.getAddressesLoading
  3. what is conversion exit defined in ABAP domain
  4. easyui combobox java_Easyui的combobox实现动态数据级联效果
  5. php中Session的生成机制、回收机制和存储机制探究
  6. 清华大学霸榜计算机学科第一!2022 USNews世界大学排名出炉,计算机前50中国占19个...
  7. 瑞星:以创新引领个人安全市场
  8. 交换机和路由器的区别_秒懂交换机和路由器的功用区别 拷贝
  9. re: Asp.net常用的51个代码(非常实用)(转)
  10. Lesson 05 for Plotting in R for Biologists
  11. 小区进入刷卡,快递不方便
  12. 安卓mqtt调试工具_App推荐——搞机工具
  13. React组件化开发
  14. 苹果手机如何找回id密码_苹果手机丢失24天后成功找回
  15. n阶魔方的构成方法C语言,穷举法打印n阶魔方矩阵
  16. 关爱残障儿童,天使之翼爱心活动进行
  17. python1000以内水仙花数_python 计算1000以内的水仙花数
  18. 浙江省2019年高考计算机排名,2019年高考各省文理科第一名去向,计算机大热
  19. linux这个名字,Linux 今天 24 岁了,他爸爸最初起的名字却不是这个
  20. 【邮箱问题】无法登录邮箱、需要绑定手机(解决方法)

热门文章

  1. 天行者在《欧比旺》里的50句台词,让这家AI克隆语音的公司做了10万个交流文件...
  2. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java宠物领养平台16e63(1)
  3. Kotlin遍历文件目录
  4. 如何在 Windows 上的 VirtualBox 中安装 macOS Big Sur
  5. linux io测试陈旭,陈旭展
  6. linux下的arp防火墙 ---- shadaarp
  7. 小猫钓鱼(纸牌游戏)
  8. 啊,潜水半年,再次浮出水面
  9. springboot vue mysql企业人事系统源码+论文+答辩稿+PPT+远程安装配置
  10. 美术集网校:面对不同角度人物这些素描线条有变化~