首页 > 编程语言 >关于java中execl导入和导出的问题

关于java中execl导入和导出的问题

时间:2023-05-12 12:23:34浏览次数:29  
标签:execl java 导出 导入 poi workbook new sheet row

前言:最近没有更新,懈怠了。前两天刚写了一个execl导出的需求,过来总结一下这方面的内容

大概在很久很久以前,微软的电子表格软件 Excel 以操作简单、存储数据直观方便,还支持打印报表,在诞生之初,可谓深得办公室里的白领青睐,极大的提升了工作的效率,不久之后,便成了办公室里的必备工具。
随着更多的新语言的崛起,例如我们所熟悉的 java,后来便有一些团队开始开发一套能与 Excel 软件无缝切换的操作工具!
这其中就有我们所熟悉的 apache 的 poi,其前身是 Jakarta 的 POI Project项目,之后将其开源给 apache 基金会!
当然,在java生态体系里面,能与Excel无缝衔接的第三方工具还有很多,因为 apache poi 在业界使用的最广泛,因此其他的工具不做过多介绍!

所以!第一步当然是引入jar包啦:

<!--xls(03)-->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.1.2</version>
    </dependency>
    <!--xlsx(07)-->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.1.2</version>
    </dependency>
主要就是这个两个jar包针对着不同的execl版本

先看导出:

从整个流程来看无非是把数据填充到execl中的一个个单元格里

在 poi 工具库中,导出 api 可以分三种方式

    HSSF方式:这种方式导出的文件格式为office 2003专用格式,即.xls,优点是导出数据速度快,但是最多65536行数据:

Workbook workbook = new HSSFWorkbook();

    XSSF方式:这种方式导出的文件格式为office 2007专用格式,即.xlsx,优点是导出的数据不受行数限制,所有的数据先写入内存再导出,缺点导出速度慢

Workbook workbook = new XSSFWorkbook();

    SXSSF方式:SXSSF 是 XSSF API的兼容流式扩展,主要解决当使用 XSSF 方式导出大数据量时,内存溢出的问题,主要特性是低内存,导出的时候,先将数据写入磁盘再导出,避免报内存不足,支持导出大批量的excel数据

Workbook workbook = new SXSSFWorkbook();

再看导入:

其实导入也是三种方式,分别对应着导出的三种方式

HSSF方式:

//获取文件流
        FileInputStream inputStream = new FileInputStream(PATH + "用户信息表BigData.xls");
 
        //1.创建工作簿,使用excel能操作的这边都看看操作
        Workbook workbook = new HSSFWorkbook(inputStream);
        //2.得到表
        Sheet sheet = workbook.getSheetAt(0);
        //3.得到行
        Row row = sheet.getRow(0);
        //4.得到列
        Cell cell = row.getCell(0);

XSSF方式:

 //获取文件流
        FileInputStream inputStream = new FileInputStream(PATH + "用户信息表2007BigData.xlsx");
 
        //1.创建工作簿,使用excel能操作的这边都看看操作
        Workbook workbook = new XSSFWorkbook(inputStream);
        //2.得到表
        Sheet sheet = workbook.getSheetAt(0);
        //3.得到行
        Row row = sheet.getRow(0);
        //4.得到列
        Cell cell = row.getCell(0);

SXSSF方式:

 //获取文件流
 
        //1.创建工作簿,使用excel能操作的这边都看看操作
        OPCPackage opcPackage = OPCPackage.open(PATH + "用户信息表2007BigData.xlsx");
        XSSFReader xssfReader = new XSSFReader(opcPackage);
        StylesTable stylesTable = xssfReader.getStylesTable();
        ReadOnlySharedStringsTable sharedStringsTable = new ReadOnlySharedStringsTable(opcPackage);
        // 创建XMLReader,设置ContentHandler
        XMLReader xmlReader = SAXHelper.newXMLReader();
        xmlReader.setContentHandler(new XSSFSheetXMLHandler(stylesTable, sharedStringsTable, new SimpleSheetContentsHandler(), false));
        // 解析每个Sheet数据
        Iterator<InputStream> sheetsData = xssfReader.getSheetsData();
        while (sheetsData.hasNext()) {
            try (InputStream inputStream = sheetsData.next();) {
                xmlReader.parse(new InputSource(inputStream));
            }
        }

关于导入导出主要使用的方法:

Sheet sheet = workbook.createSheet();

Row row = sheet.createRow(0); // 创建行从0开始

Cell cell = row.createCell(0);  // 创建单元格从0开始

cell.setCellValue(“值”); // 设置单元格的值

Sheet sheet = workbook.getSheetAt(0);

Row row = sheet.getRow(0);

Cell cell = row.getCell(0);

扩展:

easypoi和easyexcel都是基于apache poi进行二次开发的。都有使用注解进行导入导出。

不同点在于:

1、easypoi 在读写数据的时候,优先是先将数据写入内存,优点是读写性能非常高,但是当数据量很大的时候,会出现oom,当然它也提供了 sax 模式的读写方式,需要调用特定的方法实现。

2、easyexcel 基于sax模式进行读写数据,不会出现oom情况,程序有过高并发场景的验证,因此程序运行比较稳定,相对于 easypoi 来说,读写性能稍慢!

easypoi 与 easyexcel 还有一点区别在于,easypoi 对定制化的导出支持非常的丰富,如果当前的项目需求,并发量不大、数据量也不大,但是需要导出 excel 的文件样式千差万别,那么我推荐你用 easypoi;反之,使用 easyexcel !

 

标签:execl,java,导出,导入,poi,workbook,new,sheet,row
From: https://www.cnblogs.com/zccjava/p/17393731.html

相关文章

  • Java使用Font字体的方法
    Java使用Font字体有两种方式:1.直接使用系统已经安装的字体。Fontfont=newFont("SourceHanSerifSC",Font.PLAIN,18); 2.使用流读取外部字体资源,然后创建字体。InputStreamfontInputStream=ResourceUtil.getStream("font/SourceHanSerifSC.ttf");Fontfont......
  • 客户端javascript对象的几何属性(获得大小及坐标)
    在一些客户端javascript对象中,存在着如宽度、高度、坐标类的几何属性,同时这些属性在不同的浏览器下又有不同的属性名。现在将所有的此类对象的几何属性汇总,便于学习,免得搞混。1.浏览器窗口在桌面的坐标(x,y)Window      IE下:window.screenLeft,window.screenTo......
  • java爬虫如何使用代理
    在Java程序中使用代理是爬取网站数据的常见技术之一。代理服务器允许你通过它来访问某个网站,从而让你可以隐藏自己的真实IP地址或者规避一些地理限制等问题。本文章将介绍如何使用Java实现网络爬虫代理。我们首先将介绍Java提供的代理相关类和方法,然后是如何编写代码实现代理网络......
  • java:常用工具类库
    最近一直在减少造轮子的做法,简单总结了一下各个工具类库:排名不分先后,链接的地址为自己找了几个比较合适的例子,供参考。 1、ApacheCommonApacheCommons是对JDK的拓展,包含了很多开源的工具,用于解决经常会遇到的问题,减少重复工作。 2、GoogleGuava Guava工程包含了若干......
  • Java设计模式-适配器模式
    适配器模式(AdapterPattern)是一种常见的设计模式,它主要用于在不改变现有系统结构的情况下,将一个类的接口转换成客户端所期望的另一个接口。在本文中,我们将介绍适配器模式的基本概念、实现方法以及优缺点,并探讨适配器模式在Java编程语言中的具体应用。简介适配器模式是一种结构型......
  • Javascript基础(三)
    ⭐WebAPIsWebAPIs和JS基础关联性JS的组成API和WebAPIAPI(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。WebAPI是......
  • Javascript基础(一)
    ⭐初识JavascriptJavaScript是世界上最流行的语言之一,是一种运行在客户端的脚本语言(Script是脚本的意思)脚本语言:不需要编译,运行过程中由js解释器(js引擎)逐行来进行解释并执行「Javascript的作用」表单动态校验(密码强度检测)(JS产生最初的目的)网页特效服务端开发......
  • Javascript基础(二)
    ⭐数组数组的概念数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素。数组是一种将一组数据存储在单个变量名下的优雅方式。创建数组1.利用new创建数组var数组名=newArray();vararr=newArray();//创建一个新的空数组2.利用......
  • 一文让你搞懂javascript如何实现继承
    一、本文想给你聊的东西包含一下几个方面:(仅限于es6之前的语法哈,因为es6里面class这关键字用上了。。)1.原型是啥?原型链是啥?2.继承的通用概念。3.Javascript实现继承的方式有哪些? 二、原型是啥?原型链是啥?1.原型是函数本身的prototype属性。首先js和java不一样,js顶多算是一个......
  • JavaFx 关键字高亮文本实现
    原文地址:JavaFx关键字高亮文本实现-Stars-One的杂货小窝整蓝奏云批量下载器里的搜索功能想到的一个关键字高亮功能,借助textflow组件来实现,记录一下本文基于TornadoFx框架进行编写,封装工具代码是kotlin版本然后也是顺便把这个封装成了stars-one/common-controls里的xHig......