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


相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
1月前
|
Java Apache
EasyPOI操作Excel从零入门
我们不造轮子,只是轮子的搬运工。(其实最好是造轮子,造比别人好的轮子)开发中经常会遇到excel的处理,导入导出解析等等,java中比较流行的用poi,但是每次都要写大段工具类来搞定这事儿,此处推荐一个别人造好的轮子,EasyPOI封装了Apache的POI技术,实现了基本的Excel导入、导出从此不再为Excel操作头疼~
20 2
EasyPOI操作Excel从零入门
|
1月前
|
存储 Java 数据处理
|
1月前
|
存储 数据处理 索引
Python操作Excel常用方法汇总
Python操作Excel常用方法汇总
33 0
|
1月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
7天前
|
Oracle Java 关系型数据库
Java 开发者必备:JDK 版本详解与选择策略(含安装与验证)
Oracle Java SE 支持路线图显示,JDK 8(LTS)支持至2030年,非LTS版本如9-11每6个月发布且支持有限。JDK 11(LTS)支持至2032年,而JDK 17及以上版本现在提供免费商用许可。LTS版本提供长达8年的支持,每2年发布一次。Oracle JDK与OpenJDK有多个社区和公司构建版本,如Adoptium、Amazon Corretto和Azul Zulu,它们在许可证、商业支持和更新方面有所不同。个人选择JDK时,可考虑稳定性、LTS、第三方兼容性和提供商支持。
18 0
|
19天前
|
存储 Java
探索 Java IO 流的多种实现方式
【4月更文挑战第4天】Java IO 流是处理输入输出的关键组件,包括文件流(FileInputStream/FileOutputStream)、字符流(FileReader/FileWriter)、缓冲区流(BufferedInputStream/BufferedOutputStream)、转换流(InputStreamReader/OutputStreamWriter)、数据流(DataInputStream/DataOutputStream)、对象流(ObjectInputStream/ObjectOutputStream)、随机访问文件流(RandomAccessFile)和管道流。
|
22天前
|
Python
python使用tkinter库,封装操作excel为GUI程序
python使用tkinter库,封装操作excel为GUI程序
|
1月前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
49 2
|
1月前
|
Java API 计算机视觉
java实现人脸识别V3版本开发
java实现人脸识别V3版本开发
17 0
|
1月前
|
SQL Java easyexcel
【Java】百万数据excel导出功能如何实现
【Java】百万数据excel导出功能如何实现
130 0