今天在开发中遇到用户列表导入导出的功能实现,这里了解到使用POI函数库可以完成此任务!特此记录一下

POI

Apache POI是Apache软件基金会开放的源码函数库,POI提供API给Java程序对Office格式文档读和写的功能。

  • HSSF:提供读写Excel格式档案的功能。Excel2003
  • XSSF:提供读写OOXML格式档案的功能。Excel2007
  • HWPF:提供读写Word文档的功能。
  • HSLF:提供读写PPT的功能。
  • HDGF:提供读写Visio格式档案的功能。

上面提及到的五个对象分别操作不同文件。
这里只测试了Excel读写相关,剩下的只需要修改文件后缀名和指定对象即可。

相关依赖

创建完项目后,首先需要引入POI的相关依赖。

 <dependencies>
<!-- xls -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<!-- xlsx -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<!-- test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>

将数据保存到Excel2003

步骤
1、创建workbook对象,workbook是接口,实现类指定要操作的对象,例如要操作的文件是Excel2003就创建的是HSSFWorkbook,如果操作的是Excel2007那就创建XSSFWorkbook

2、创建Sheet对象,Sheet具体指的就是哪张表

3、创建Row,指明要将写入的数据放在第几行
4、创建Cell,指明将数据写在第几列,也就是第几个单元格
5、最后创建输出流,将内存中的数据持久化

/**
* 向Excel2003版本中写入数据
*/
@Test
public void writeTest03() throws IOException { //1、创建Workbook
Workbook workbook = new HSSFWorkbook();
//2、创建sheet,默认名字是sheet1,sheet2...
Sheet sheet = workbook.createSheet("会员列表");
//3、创建row 参数是0代表第1行,参数是1代表第二行...
Row row1 = sheet.createRow(0);
//4、创建cell 第0列
Cell cell = row1.createCell(0);
//5、在cell中填充数据
cell.setCellValue("datao");
//6、向文件中写入数据,以上步骤都是在内存中完成的,想要将文件持久化到磁盘需要文件输出流
FileOutputStream outputStream = new FileOutputStream("E:\\1.xls");
workbook.write(outputStream);
//7、关闭流
outputStream.close(); }

将数据保存在Excel2007

步骤和上面的基本一样,只是workbook的实现类不同,保存的文件名后缀不同。

public void writeTest07() throws IOException {

        //1、创建Workbook
Workbook workbook = new XSSFWorkbook();
//2、创建sheet,默认名字是sheet1,sheet2...
Sheet sheet = workbook.createSheet("用户列表");
//3、创建row 参数是0代表第1行,参数是1代表第二行...
Row row1 = sheet.createRow(0);
//4、创建cell 第0列
Cell cell = row1.createCell(0);
//5、在cell中填充数据
cell.setCellValue("贝姐");
//6、向文件中写入数据,以上步骤都是在内存中完成的,想要将文件持久化到磁盘需要文件输出流,注意保存到文件的后缀名,03版本的Excel文件是以.xls结尾
//excel2007版本是以.xlsx结尾
FileOutputStream outputStream = new FileOutputStream("E:\\2.xlsx");
workbook.write(outputStream);
//7、关闭流
outputStream.close();
}


写入大文件

  • 使用HSSFWorkbook写入数据有个缺点就是写入的数据是有限的,最大不能超过65535行,超过会写不进去,抛出异常,java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535)
    他是先将内存中的数据一次性写入磁盘。

  • 如果使用XSSFWorkbook写入大数据时,虽然不会报错,但是他写入速度很慢。(当写入100万行数据时内存才会溢出)

  • 如果写入大文件,推荐使用SXSSFWorkbook,它可以写入100万条数据以上,并且写入速度很快,分段写入。
    SXSSFWorkbook官方的解释:实现“BigGridDemo”策略的流式XSSFWorkbook版本。这允许写入非常大的文件而不会耗尽内存,因为任何时候只有可配置的行部分被保存在内存中。
    请注意,仍然可能会消耗大量内存,这些内存基于您正在使用的功能,例如合并区域,注释…仍然只存储在内存中,因此如果广泛使用,可能需要大量内存。

从Excel中读取

  1. 创建文件输出入流
  2. 创建workbook构造参数传入输入流
  3. 读取指定的sheet
  4. 根据sheet读取行
  5. 根据行读取单元格
  6. 输出结果
  7. 关闭输入流
//从Excel中读取值,并输出
@Test
public void read03Test() throws IOException {
//1、创建输入流,指定要读取的文件
InputStream inputStream = new FileInputStream("E:\\1.xls");
//2、创建workbook将输入流传过去
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(inputStream);
//3、指定读取的sheet
HSSFSheet sheet = hssfWorkbook.getSheet("会员列表");
//4、获取指定行
HSSFRow row = sheet.getRow(0);
//5、获取指定cell
HSSFCell cell = row.getCell(0);
//6、从cell中也就是单元格中获取数据
String cellValue = cell.getStringCellValue();
//输出结果
System.out.println(cellValue);
//关闭输入流
inputStream.close();
}

Java向指定Excel写入读取数据的更多相关文章

  1. 从Excel中读取数据(python-xlrd)

    从Excel中读取数据(python-xlrd) 1.导入模块 import xlrd 2.打开Excel文件读取数据 data = xlrd.open_workbook('excelFile.xls ...

  2. .NET 5/.NET Core使用EF Core 5连接MySQL数据库写入/读取数据示例教程

    本文首发于<.NET 5/.NET Core使用EF Core 5(Entity Framework Core)连接MySQL数据库写入/读取数据示例教程> 前言 在.NET Core/. ...

  3. 在实现从excel中读取数据作为接口参数遇到的问题

    这个算我自己第一次使用python语言实现 一个功能 一.首先我们先要代码实现如何从excel上读取数据python实现还是比较简单的 1.我使用的是xlrd模块,我们先要安装这个包,这样我们才可以使 ...

  4. Java从.CSV文件中读取数据和写入

    .CSV文件是以逗号分割的数据仓储,读取数据时从每一行中读取一条数据元祖,也就是一条数据,再用字符分割的方式获取表中的每一个数据项. import java.io.BufferedReader;    ...

  5. 从Excel中读取数据并批量写入MySQL数据库(基于MySQLdb)

    一.Excel内容如下,现在需要将Excel中的数据全部写入的MySQL数据库中: 二.连接MySQL的第三方库使用的是“MySQLdb”,代码如下: # -*- coding:utf-8 -*-im ...

  6. Java怎样处理EXCEL的读取

    须要包:poi-3.5.jar.poi-ooxml-3.5.jar 实例: [java] view plaincopy public class ProcessExcel { private Work ...

  7. C#实现从EXCEL文件读取数据到SqlServer数据库

    用第三方组件:NPOI组件实现 先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用.使用 NPOI ...

  8. JAVA BufferedReader 类从标准输入读取数据

    1,从标准输入上建立输入流: BufferedReader localReader = new BufferedReader( new InputStreamReader(System.in)); S ...

  9. openxl模块从excel里面读取数据

    #excel读取数据 from openpyxl import load_workbook class Do_Excel: def __init__(self,file,work_space,inde ...

随机推荐

  1. CSS绘制正五角星原理(数学模型)

    尽管网上有很多CSS绘制五角星的代码案例,但是对于初学者来说可以拿来移植使用,但是在不明白其原理的情况下,进行修改移植就比较困难了.譬如想要将五角星尺寸进行缩小或者放大等设计,就需要对原代码相关数据进 ...

  2. 开始是为了结束,结束是新的开始——NOI 2020 游记

    Day 0 报道日 晚上的时候我们的教练给我们做考前动员.给我们讲:NOI的五个小时需要认真的规划,不能被T1打乱节奏.他让我们思考明天的策略,把可能出问题的地方都想清楚. 结果后来,宿管给我测体温, ...

  3. CentOS7 扩容磁盘非根分区

    CentOS7扩展磁盘分区 ​ 因为业务所在分区空间不足,需要扩容.分配磁盘大小为1T但实际使用过程中发现仅使用了500G左右空间,本次计划在原有磁盘上扩容1T,加上之前500G空闲直接扩容1.5TB ...

  4. 使用tkinter打造一个小说下载器,想看什么小说,就下什么

    前言 今天教大家用户Python GUI编程--tkinter 打造一个小说下载器,想看什么小说,就下载什么小说 先看下效果图 Tkinter 是使用 python 进行窗口视窗设计的模块.Tkint ...

  5. 跨站点请求伪造 - SpringBoot配置CSRF过滤器

    1. 跨站点请求伪造   风险:可能会窃取或操纵客户会话和 cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务.   原因:应用程序使用的认证方法不充分. ...

  6. 题解洛谷P1538【迎春舞会之数字舞蹈】

    方法:暴力,判断,输出 本题为了更好理解建议各位可以复制样例来研究,甚至可以复制题解来测试思想,相信大家不会抄. 有什么不好的请大佬们在评论里指出,谢谢 #include <bits/stdc+ ...

  7. Eureka系列(一)Eureka功能介绍

    Eureka核心功能点 服务注册(register):   Client会发送一次Rest请求给Server端来实现注册,Server接受到请求会将服务信息存储起来,并将注册信息给同集群其他Serve ...

  8. 用php简单区别泛解析

    <?php header('content-type:text/html; charset=utf-8'); $host = '58.com'; $hosts = gethostbyname(' ...

  9. Java详细指南

    Java 基础 并发 JVM Java8 新特性 代码优化 网络 操作系统 数据结构与算法 数据库 系统设计 设计模式 常用框架 网站架构 软件底层 其他 Java 基础 <Head First ...

  10. Python常用配置文件ini、json、yaml读写总结

    开发项目时,为了维护一些经常需要变更的数据,比如数据库的连接信息.请求的url.测试数据等,需要将这些数据写入配置文件,将数据和代码分离,只需要修改配置文件的参数,就可以快速完成环境的切换或者测试数据 ...