Java03版本excel IO操作写

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 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的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
18天前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
79 5
|
18天前
|
Java API Apache
|
1月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
67 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
21天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
28 4
|
22天前
|
Java Linux Windows
如何查看已安装的 Java 版本
要查看已安装的 Java 版本,打开命令提示符或终端,输入 `java -version`,回车后即可显示当前系统中 Java 的版本信息。
|
22天前
|
Ubuntu Java Linux
如何检查 Java 版本是否兼容
要检查Java版本是否兼容,可在命令行输入“java -version”查看当前安装的Java版本,然后对比目标应用所需的Java版本,确保其满足要求。
|
1月前
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
48 1
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
1月前
|
Java Docker 容器
java版本学习网站又添加了一个libgdx模块
java版本学习网站之前添加了docker,想了想还是再把libgdx添加进去吧。
32 3
|
2月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
1月前
|
Java 数据处理 开发者
揭秘Java IO流:字节流与字符流的神秘面纱!
揭秘Java IO流:字节流与字符流的神秘面纱!
35 1
下一篇
无影云桌面