POI:对Excel的基本写操作 整理1

首先导入相关依赖 

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><!--xls(03)--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><!--xlsx(07)--><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency><!-- 日期格式化工具 --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.12.5</version></dependency><!--测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency>

1 写入简单的数据

public class ExcelWrite {String PATH = "D:\\Idea-projects\\POI\\POI_projects";// 以下是相应的写入操作方法// ......
}

(1)当向03版本的Excel中写入数据

    @Testpublic void testWrite03() throws IOException {
//        1.创建一个工作簿Workbook workbook = new HSSFWorkbook();//        2.创建一个工作表Sheet sheet = workbook.createSheet("xx");//        3.创建一行Row row = sheet.createRow(0);
//        4.创建一个单元格Cell cell1 = row.createCell(0);cell1.setCellValue("今日新增观众");Cell cell2 = row.createCell(1);cell2.setCellValue(666);//        创建第二行(2,1)Row row2 = sheet.createRow(1);Cell cell21 = row2.createCell(0);cell21.setCellValue("统计时间");//        (2,2)Cell cell22 = row2.createCell(1);String time = new DateTime().toString("yyyy-MM-dd HH:mm:ss");cell22.setCellValue(time);//        5. 生成一张表 (IO 流)   03版本就是使用xls结尾FileOutputStream fileOutputStream = new FileOutputStream(PATH + "xx03.xls");workbook.write(fileOutputStream);//        6.关闭流fileOutputStream.close();System.out.println("文件生成完毕!");}

(2)当向07版本的Excel中写入数据

    @Testpublic void testWrite07() throws IOException {
//        1.创建一个工作簿Workbook workbook = new XSSFWorkbook();//        2.创建一个工作表Sheet sheet = workbook.createSheet("xiexu1");//        3.创建一行Row row = sheet.createRow(0);
//        4.创建一个单元格Cell cell1 = row.createCell(0);cell1.setCellValue("今日新增观众");Cell cell2 = row.createCell(1);cell2.setCellValue(666);//        创建第二行(2,1)Row row2 = sheet.createRow(1);Cell cell21 = row2.createCell(0);cell21.setCellValue("统计时间");//        (2,2)Cell cell22 = row2.createCell(1);String time = new DateTime().toString("yyyy-MM-dd HH:mm:ss");cell22.setCellValue(time);//        5. 生成一张表(IO 流)   03版本就是使用xlsx结尾FileOutputStream fileOutputStream = new FileOutputStream(PATH + "xiexu07.xlsx");workbook.write(fileOutputStream);//        6.关闭流fileOutputStream.close();System.out.println("文件生成完毕!");}

2 写入大量的数据

(1)当向03版本的Excel中写入大量数据

缺点: 最多只能处理65536行,否则会抛出异常;

优点:过程中写入缓存,不操作磁盘,最后一次性写入磁盘,速度快。

    @Testpublic void testWriteBigData03() throws IOException {// 计算时间差long beginTime = System.currentTimeMillis();// 1.创建一个工作簿Workbook workbook = new HSSFWorkbook();// 2.创建一个工作表Sheet sheet = workbook.createSheet("xiexu2");// 3. 写入数据  (03版最多只能放65536行, 超出会报异常)for (int rowNum = 0 ; rowNum < 65536; rowNum++) {Row row = sheet.createRow(rowNum);for (int cellNum = 0; cellNum < 10; cellNum++) {Cell cell = row.createCell(cellNum);cell.setCellValue(cellNum);}}System.out.println("写入完成!");FileOutputStream fileOutputStream = new FileOutputStream(PATH + "bigData03.xls");workbook.write(fileOutputStream);fileOutputStream.close();long endTime = System.currentTimeMillis();System.out.println((double) (endTime - beginTime) / 1000);  // 毫秒转换为秒}


1.129s  还是非常快的


只能写入65536行,超出会报异常


(2)当向07版本的Excel中写入大量数据

缺点:写数据时速度非常慢,非常耗内存,也会发生内存溢出,如100万条数据时;

优点:可以写入较大数据量的数据, 如20万条数据。

    @Testpublic void testWriteBigData07() throws IOException {   // 耗时长// 计算时间差long beginTime = System.currentTimeMillis();// 1.创建一个工作簿Workbook workbook = new XSSFWorkbook();// 2.创建一个工作表Sheet sheet = workbook.createSheet("xiexu3");// 3. 写入数据for (int rowNum = 0 ; rowNum < 65538; rowNum++) {   // ? 65538Row row = sheet.createRow(rowNum);for (int cellNum = 0; cellNum < 10; cellNum++) {Cell cell = row.createCell(cellNum);cell.setCellValue(cellNum);}}System.out.println("over");FileOutputStream fileOutputStream = new FileOutputStream(PATH + "bigData07.xlsx");workbook.write(fileOutputStream);fileOutputStream.close();long endTime = System.currentTimeMillis();System.out.println((double) (endTime - beginTime) / 1000);  // 毫秒转换为秒}

耗时4.812s, 相比于03版本,是非常慢的


可以写入超出65536行的数据 

(3)因为07版本写入大量数据时的速度较慢,所以我们可以用07的加速版的做法:SXSSFWorkbork()

优点:可以写非常大的数据量,如100万条甚至更多,写入数据速度快,占用更少的内存;

注意:过程中会产生临时文件,需要清理临时文件(默认有100条记录被保存在内存中,如果超出了这个数量,则最前面的数据被写入临时文件,如果想自定义内存中数据的数量,可以使用  new  SXSSFWorkbook(自定义的数量值)  ) 

    @Testpublic void testWriteBigData07quick() throws IOException {   // SXSSF 更快// 计算时间差long beginTime = System.currentTimeMillis();// 1.创建一个工作簿Workbook workbook = new SXSSFWorkbook();// 2.创建一个工作表Sheet sheet = workbook.createSheet("xiexu4");// 3. 写入数据for (int rowNum = 0 ; rowNum < 65538; rowNum++) {   // ? 65538Row row = sheet.createRow(rowNum);for (int cellNum = 0; cellNum < 10; cellNum++) {Cell cell = row.createCell(cellNum);cell.setCellValue(cellNum);}}System.out.println("over");FileOutputStream fileOutputStream = new FileOutputStream(PATH + "bigData07quick.xlsx");workbook.write(fileOutputStream);fileOutputStream.close();((SXSSFWorkbook) workbook).dispose();    // 清除临时文件long endTime = System.currentTimeMillis();System.out.println((double) (endTime - beginTime) / 1000);  // 毫秒转换为秒}


现在是1.667s相比于之前,还是非常快的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/618526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【华为鸿蒙】HarmonyOS开发学习:下载与安装软件看这一篇就够了!

下载与安装软件 DevEco Studio 支持 Windows 和 macOS 系统&#xff0c;下面将针对两种操作系统的软件安装方式进行介绍 Windows 环境 运行环境要求 为保证 DevEco Studio 正常运行&#xff0c;建议您的电脑配置满足如下要求&#xff1a;  操作系统&#xff1a;Windows10 …

leetcode 动态规划(爬楼梯、零钱兑换、完全平方数)

70. 爬楼梯&#xff08;进阶版&#xff09; 卡码网&#xff1a;57. 爬楼梯(opens new window) 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 < m < n)个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 注意&#xff1a;给定 n 是一个正…

【前后端的那些事】快速上手富文本+富文本图片上传

文章目录 fullText富文本1. 后端接口1.1 定义常量1.2 定义返回实体类1.3 上传图片接口1.4 下载图片接口 2. 前端代码编写2.1 安装2.2 快速使用 3. 配置富文本图片上传地址3.1 配置图片上传配置 4. 全部代码展示 前言&#xff1a;最近写项目&#xff0c;发现了一些很有意思的功能…

RTMP 视频数据封装

RTMP 协议 与HTTP(超文本传输协议)同样是一个基于TCP的Real Time Messaging Protocol(实时消息传输协议)。由Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的一种开放协议 。在国内被广泛的应用于直 播领域。HTTP默认端口为80&#xff0c;RTMP则为1935…

上海AI实验室等开源,音频、音乐统一开发工具包Amphion

上海AI实验室、香港中文大学数据科学院、深圳大数据研究院联合开源了一个名为Amphion的音频、音乐和语音生成工具包。 Amphion可帮助开发人员研究文本生成音频、音乐等与音频相关的领域&#xff0c;可以在一个框架内完成&#xff0c;以解决生成模型黑箱、代码库分散、缺少评估…

蓝桥杯AcWing学习笔记 8-1数论的学习(上)

蓝桥杯 我的AcWing 题目及图片来自蓝桥杯C AB组辅导课 数论&#xff08;上&#xff09; 蓝桥杯省赛中考的数论不是很多&#xff0c;这里讲几个蓝桥杯常考的知识点。 欧几里得算法——辗转相除法 欧几里得算法代码&#xff1a; import java.util.Scanner ;public class Main…

【华为鸿蒙】HarmonyOS概述:技术特性

来源&#xff1a;HarmnyOS 官网 https://developer.harmonyos.com/cn/docs/documentation/doc-guides/harmonyos-features-0000000000011907 技术特性 硬件互助&#xff0c;资源共享 多种设备之间能够实现硬件互助、资源共享&#xff0c;依赖的关键技术包括分布式软总线、分布…

Vant-ui图片懒加载

核心代码 在你的全局顶部引入和初始化 Vue.use(vant.Lazyload, {loading: /StaticFile/img/jiazai.jpg,error: /StaticFile/img/jiazai.jpg,lazyComponent: false, });//图片懒加载 <img v-lazy"https://img-blog.csdnimg.cn/direct/3d2c8a7e2c0040488a8128c3e381d58…

8.云原生存储之Ceph集群

1. 私有云实战之基础环境搭建 2. 云原生实战之kubesphere搭建 3.云原生之kubesphere运维 4. 云原生之kubesphere基础服务搭建 5.云原生安全之kubesphere应用网关配置域名TLS证书 6.云原生之DevOps和CICD 7.云原生之jenkins集成SonarQube 8.云原生存储之Ceph集群 文章目录 为什么…

DynastyPersist:一款功能强大的Linux持久化安全审计与测试工具

关于DynastyPersist DynastyPersist是一款专为红队研究人员和CTF玩家设计的Linux安全测试工具&#xff0c;该工具可以适用于各种安全评估任务和安全测试场景。 DynastyPersist本质上是一个Linux持久化脚本&#xff0c;并提供了大量的安全测试功能&#xff0c;可以为我们展示在…

Java多线程并发篇----第十一篇

系列文章目录 文章目录 系列文章目录前言一、什么是悲观锁二、什么是自旋锁三、Synchronized 同步锁前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、什么是悲观…

【大数据架构】日志采集方案对比

整体架构 日志采集端 Flume Flume的设计宗旨是向Hadoop集群批量导入基于事件的海量数据。系统中最核心的角色是agent&#xff0c;Flume采集系统就是由一个个agent所连接起来形成。每一个agent相当于一个数据传递员&#xff0c;内部有三个组件&#xff1a; source: 采集源&…

Unity中URP下实现深度贴花(雾效支持和BRP适配)

文章目录 前言一、让我们的贴画支持雾效1、我们舍弃内部的MixFog方法2、使用 雾效混合因子 对最后输出颜色进行线性插值相乘 二、在Shader中&#xff0c;限制贴花纹理的采样方式1、申明 纹理 和 限制采样方式的采样器2、在片元着色器进行纹理采样 三、BRP适配1、C#脚本中&#…

仿真验证方法(3)——物理验证

目录 一、物理验证的分类 二、DRC 2.1 设计规则 2.2 规则示例 2.3 线宽违例 2.4 间距违例 2.5 交叠违例 三、金属覆盖图形密度检查 四、天线比率检查 4.1 起因 4.2 计算 4.3 改进 五、LVS检查 六、物理验证常用的EDA工具 七、总结 一、物理验证的分类 对于物理验…

专业课145+合肥工业大学833信号分析与处理考研经验合工大电子信息通信

今年专业课145也是考研科目中最满意的一门&#xff0c;其他基本相对平平&#xff0c;所以这里我总结一下自己的专业课合肥工业大学833信号分析与处理的复习经验。 我所用的教材是郑君里的《信号与系统》&#xff08;第三版&#xff09;和高西全、丁玉美的《数字信号处理》&…

java方法的定义和使用

方法 今日目标&#xff1a; 能够知道方法的好处 能够根据两个明确分析方法的参数和返回值 能够编写方法完成授课案例&#xff0c;并在主方法中完成方法的调用 能够知道方法重载及其特点 1&#xff1a;方法的定义和使用 1.1 方法概述 方法(method)&#xff1a;就是完成特…

Java常用的加密技术

项目结构&#xff1a; 总体代码&#xff1a; package VirtualUtils; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import java.io.UnsupportedEncodingException; import java.security.*; import java.security.sp…

深入浅出线程原理

Linux 中的线程本质 线程接口由 Native POSIX Thread Library 提供&#xff0c;即&#xff1a;NPTL 库函数 线程被称为轻量级进程 (Light Weight Process) 每一个线程在内核中都对应一个调度实体&#xff0c;拥有独立的结构体 (task_struct) 内核设计&#xff1a;一个进程对…

【python】matplotlib画图常用功能汇总

目录: 一、matplotlib画图风格二、matplotlib图像尺寸和保存分辨率三、matplotlib子图相关功能创建子图&#xff1a;绘制子图&#xff1a;设置子图属性&#xff1a;调整布局&#xff1a;示例代码&#xff1a; 四、matplotlib字体设置字体族和字体的区别字体选择和设置1. Matplo…

亚马逊云科技 WAF 部署小指南(五):在客户端集成 Amazon WAF SDK 抵御 DDoS 攻击...

方案介绍 在 WAF 部署小指南&#xff08;一&#xff09;中&#xff0c;我们了解了 Amazon WAF 的原理&#xff0c;并通过创建 WEB ACL 和托管规则防护常见的攻击。也了解了通过创建自定义规则在 HTTP 请求到达应用之前判断是阻断还是允许该请求。在 Amazon WAF 自定义规则中&am…