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;
目录
相关文章
|
2月前
|
Java API Apache
Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
【10月更文挑战第29天】Java编程如何读取Word文档里的Excel表格,并在保存文本内容时保留表格的样式?
189 5
|
23天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
107 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
1月前
|
数据可视化 搜索推荐 项目管理
一分钟解决Excel多人协作的版本混乱问题
多人协同编辑Excel彻底解决了传统多人编辑时的版本混乱问题。通过云端实时同步,团队成员可以同时更新同一表格,避免了邮件传递和手动合并的繁琐。实时协作不仅提升了效率,还防止了版本冲突。Excel的“更改历史记录”功能支持查看和回滚操作,确保错误可追溯。
|
2月前
|
Java
java 中 IO 流
Java中的IO流是用于处理输入输出操作的机制,主要包括字节流和字符流两大类。字节流以8位字节为单位处理数据,如FileInputStream和FileOutputStream;字符流以16位Unicode字符为单位,如FileReader和FileWriter。这些流提供了读写文件、网络传输等基本功能。
64 9
|
2月前
|
Java BI API
Java Excel报表生成:JXLS库的高效应用
在Java应用开发中,经常需要将数据导出到Excel文件中,以便于数据的分析和共享。JXLS库是一个强大的工具,它基于Apache POI,提供了一种简单而高效的方式来生成Excel报表。本文将详细介绍JXLS库的使用方法和技巧,帮助你快速掌握Java中的Excel导出功能。
93 6
|
3月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
111 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
2月前
|
Java API Apache
|
2月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
125 4
|
2月前
|
Java Linux Windows
如何查看已安装的 Java 版本
要查看已安装的 Java 版本,打开命令提示符或终端,输入 `java -version`,回车后即可显示当前系统中 Java 的版本信息。
1144 1
|
2月前
|
Ubuntu Java Linux
如何检查 Java 版本是否兼容
要检查Java版本是否兼容,可在命令行输入“java -version”查看当前安装的Java版本,然后对比目标应用所需的Java版本,确保其满足要求。
106 1

热门文章

最新文章