Java03版本excel IO操作写

简介: Java03版本excel IO操作写

03版本excel IO操作写的全部代码如下

package com.wyh.Test;
import org.apache.poi.hssf.usermodel.HSSFSheet;
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.joda.time.DateTime;
import org.junit.Test;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Date;
/**
 * @program: JavaExecl
 * @description: 写excel 03版本
 * @author: 魏一鹤
 * @createDate: 2021-12-12 10:42
 **/
public class ExcelWrite03 {
//全局路径,供我们操作使用方便
    static String path="D:\\Tools\\JavaWorkSpace\\JavaExecl\\";
    @Test
public  void  ExcelWrite03() throws Exception {
//1创建一个工作簿
        Workbook workbook=new HSSFWorkbook();
//2创建一个工作表 工作簿里面包含工作表,所以创建工作表要通过工作簿创建
        //默认的工作表是没有名字的,需要我们手动赋值,和我们在excel中更改sheet工作表的名称是一样的 操作
        Sheet sheet=workbook.createSheet("用户表");
//3创建行 行也是在我们的表中存在的,所以需要用到表来创建
        //默认从0开始 也就是第一行
        Row row1 = sheet.createRow(0);
//创建单元格 第一行的第一个数据 用坐标表示为(1,1)
        Cell cell11 = row1.createCell(0);
//创建单元格 第一行的第二个数据 用坐标表示为(1,2)
        Cell cell12 = row1.createCell(1);
//给单元格赋值
        cell11.setCellValue("姓名");
        cell12.setCellValue("魏一鹤");
//创建第二行
        Row row2=sheet.createRow(1);
//创建第二行的第一列
        Cell cell21 = row2.createCell(0);
        Cell cell22 = row2.createCell(1);
//给单元格赋值(2.1)
        cell21.setCellValue("出生日期");
//创建时间并且格式化
        String s = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
//给单元格赋值(2.2)
        cell22.setCellValue(s);
//生成一张表 其实就是IO流操作 03版本就是使用xls文件结尾
        FileOutputStream fileOutputStream = new FileOutputStream(path + "用户测试03.xls");
//输出工作簿
        workbook.write(fileOutputStream);
//关闭流
        fileOutputStream.close();
        System.out.println("用户测试03.xls生成完毕");
    }
}


07版本excel IO操作写的全部代码如下

package com.wyh.Test;
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.joda.time.DateTime;
import org.junit.Test;
import java.io.FileOutputStream;
/**
 * @program: JavaExecl
 * @description: 07版本excel写操作
 * @author: 魏一鹤
 * @createDate: 2021-12-12 23:58
 **/
public class ExcelWrite07 {
//全局路径,供我们操作使用方便
    static String path="D:\\Tools\\JavaWorkSpace\\JavaExecl\\";
    @Test
public  void  ExcelWrite07() throws Exception {
//07版和03最大的差别就是使用的工具不一样 03是HSSF 07是XSSF
        //其他代码无需改动
        //1创建一个工作簿
        Workbook workbook=new XSSFWorkbook();
//2创建一个工作表 工作簿里面包含工作表,所以创建工作表要通过工作簿创建
        //默认的工作表是没有名字的,需要我们手动赋值,和我们在excel中更改sheet工作表的名称是一样的 操作
        Sheet sheet=workbook.createSheet("用户表");
//3创建行 行也是在我们的表中存在的,所以需要用到表来创建
        //默认从0开始 也就是第一行
        Row row1 = sheet.createRow(0);
//创建单元格 第一行的第一个数据 用坐标表示为(1,1)
        Cell cell11 = row1.createCell(0);
//创建单元格 第一行的第二个数据 用坐标表示为(1,2)
        Cell cell12 = row1.createCell(1);
//给单元格赋值
        cell11.setCellValue("今日学习");
        cell12.setCellValue("api和easyExcl导出导入excel");
//创建第二行
        Row row2=sheet.createRow(1);
//创建第二行的第一列
        Cell cell21 = row2.createCell(0);
        Cell cell22 = row2.createCell(1);
//给单元格赋值(2.1)
        cell21.setCellValue("学习日期");
//创建时间并且格式化
        String s = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
//给单元格赋值(2.2)
        cell22.setCellValue(s);
//生成一张表 其实就是IO流操作 07版本就是使用xlsx文件结尾
        FileOutputStream fileOutputStream = new FileOutputStream(path + "用户测试07.xlsx");
//输出工作簿
        workbook.write(fileOutputStream);
//关闭流
        fileOutputStream.close();
        System.out.println("用户测试07.xls生成完毕");
    }
}


运行后发现,会在项目本地生成我们定义的excel,打开查看

image.png

image.png

image.png

03版和07版的区别如下

1 03版本有最大长度现在 07版本没有

2 03版本后缀xls 07版本后缀xlsx

3 03版本使用的工具是HSSF,07版本使用的是XSSF

5 大数据绕导入导出(批量)

真实开发中,大多数就是大数据批量导入或者导出excel

大文件写HSSF

缺点:最多只能处理65536行,否则会报内存溢出异常
优点:过程中写入缓存,不操作磁盘,最后一次性写入磁盘,速度快

大文件写XSSF

缺点:写数据时速度非常慢,非常消耗内存,也会发生内存溢出,比如100万条
优点:可以写较大的数据量,比如20万条
03版本HSSF循环导入65536行数据(03版本最大行就是65536)

03版本HSSF循环插入65536条

package com.wyh.Test;
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.junit.Test;
import java.io.FileOutputStream;
/**
 * @program: JavaExecl
 * @description: 大数据量写03版本
 * @author: 魏一鹤
 * @createDate: 2021-12-14 23:31
 **/
public class BigDateExcelWrite03 {
//全局路径,供我们操作使用方便
    static String path = "D:\\Tools\\JavaWorkSpace\\JavaExecl\\";
    @Test
public void BigDateExcelWrite03() throws Exception {
//开始时间 用于计算时间差
        long beginTime = System.currentTimeMillis();
//创建工作簿  03版本使用HSSF
        Workbook workbook = new HSSFWorkbook();
//创建工作表 这里就不给它命令了 按照默认的来
        Sheet sheet = workbook.createSheet();
//写入数据 循环插入65536行数据,03版的HSSF最多只能插入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("生成excel表完毕");
//03版本的后缀是xls
        //开启文件流
        FileOutputStream fileOutputStream = new FileOutputStream(path + "BigDateExcelWrite03.xlsx");
//开始写excel
        workbook.write(fileOutputStream);
//关闭流
        fileOutputStream.close();
//结束时间
        long endTime = System.currentTimeMillis();
//输出花费的时间
        System.out.println("花费的时间:"+(double)(endTime - beginTime)/1000);
    }
}

运行发现excel已经创建成功,速度也非常的快

image.png

打开查看

image.png


已知03版本xls最多存65536行,那么如果我们循环插入65537行会怎么样呢? 保留源代码,循环最大值设置为65537

再次运行发现会报错

image.png

07版本XSSF循环插入65536条

 把后缀改为xlsx,把HSSF缓存XSSF即可


package com.wyh.Test;
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;
/**
 * @program: JavaExecl
 * @description: 大数据量写03版本
 * @author: 魏一鹤
 * @createDate: 2021-12-14 23:31
 **/
public class BigDateExcelWrite07 {
//全局路径,供我们操作使用方便
    static String path = "D:\\Tools\\JavaWorkSpace\\JavaExecl\\";
    @Test
public void BigDateExcelWrite07() throws Exception {
//开始时间 用于计算时间差
        long beginTime = System.currentTimeMillis();
//创建工作簿 07版本的使用XSSF
        Workbook workbook = new XSSFWorkbook();
//创建工作表 这里就不给它命令了 按照默认的来
        Sheet sheet = workbook.createSheet();
//写入数据 循环插入65536行数据,03版的HSSF最多只能插入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("生成excel表完毕");
//037版本的后缀是xlsx
        //开启文件流
        FileOutputStream fileOutputStream = new FileOutputStream(path + "BigDateExcelWrite07.xlsx");
//开始写excel
        workbook.write(fileOutputStream);
//关闭流
        fileOutputStream.close();
//结束时间
        long endTime = System.currentTimeMillis();
//输出花费的时间
        System.out.println("花费的时间:"+(double)(endTime - beginTime)/1000);
    }
}

虽然也运行成功,但是可以明显感觉到速度不如03版HSSF,但是可以存更多的数据

image.png


相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
7月前
|
监控 Java API
现代 Java IO 高性能实践从原理到落地的高效实现路径与实战指南
本文深入解析现代Java高性能IO实践,涵盖异步非阻塞IO、操作系统优化、大文件处理、响应式网络编程与数据库访问,结合Netty、Reactor等技术落地高并发应用,助力构建高效可扩展的IO系统。
212 0
|
4月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
222 1
|
5月前
|
安全 架构师 Java
Java LTS版本进化秀:从8到21的欢乐升级之旅
困惑于Java版本选择?轻松幽默地穿越Java LTS版本时光隧道,掌握从Java 8到21的关键特性。通过一家初创公司的系统升级故事,直观了解每个版本如何解决代码冗余、性能瓶颈等开发痛点,助你在技术选型中做出明智决策。
310 7
|
6月前
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
7月前
|
存储 Java Linux
操作系统层面视角下 Java IO 的演进路径及核心技术变革解析
本文从操作系统层面深入解析Java IO的演进历程,涵盖BIO、NIO、多路复用器及Netty等核心技术。分析各阶段IO模型的原理、优缺点及系统调用机制,探讨Java如何通过底层优化提升并发性能与数据处理效率,全面呈现IO技术的变革路径与发展趋势。
158 2
|
6月前
|
SQL Java 数据库连接
Java IO流(一):字节流与字符流基础
本文全面解析Java IO流,涵盖字节流、字符流及其使用场景,帮助开发者理解IO流分类与用途,掌握文件读写、编码转换、异常处理等核心技术,通过实战案例提升IO编程能力。
|
12月前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
592 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
7月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
321 1
|
6月前
|
Cloud Native Java API
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
1207 0
|
9月前
|
JavaScript Java 关系型数据库
家政系统源码,java版本
这是一款基于SpringBoot后端框架、MySQL数据库及Uniapp移动端开发的家政预约上门服务系统。
274 6
家政系统源码,java版本

热门文章

最新文章