【Apache POI】Excel操作(一):Excel本地写入基本操作的实现
有人住高楼,有人在深沟,有人光万丈,有人一身锈;世人千万种,浮云莫去求,斯人若彩虹,遇上方知有。
有目录,不迷路
- 前言
- 前期准备
- POI基本介绍
- Excel简单介绍
- Excel版本介绍
- Excel基本元素
- 开整
- 导入依赖
- 本地写入
- 03版本 or 07版本?
- 03版本
- 07版本
前言
接下来我会出一系列关于如何用Java操作Excel的博客教程,欢迎有需要的小伙伴持续关注哦!
相信大家在开发的过程中难免遇到要进行Excel读写操作的任务。反正最近本博主就遇到了,因为缺乏相关经验,也是一边烦恼不知从何下手一边研究了一段时间,最后还算是完美的完成了任务。其实跟Java的文件读写操作没两样,而且使用一些工具的话,还要更加的简单。
前期准备
本篇博客的编码环境为:SpringBoot(Java框架
) + IDEA(开发工具
),若是有不会搭建环境的小伙伴可以参考我的这两篇博客哦:
用Spring Initializr快速构建SpringBoot及整合MVC
或者
用Maven搭建一个SpringBoot工程及启动多个工程实例
POI基本介绍
说到Java操作excel,我们当然不可能用原生的JAVAIO流
代码去写,那样效率未免有些低下。这里隆重的给大家介绍由Apache提供的工具Apache POI
(当然之后也会给大家介绍有Alibaba提供的工具EasyExcel
,使用起来更加的方便,不过其实也是在Apache POI
上面进行了封装)。
首先,我们来到Apache POI根正苗红的官网:http://poi.apache.org/
然后,你会很惊喜的发现:似乎看不出什么名堂,也不知道怎么使用。
不过,不用担心,有本博主在,所有问题都将迎刃而解
我们直接来到百度百科就好了:点击这里,进行跳转
我们看到最开始的简介中的:
POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
也就是说,Apache POI
不光能操作Excel的读写,还能操作其他的Microsoft Office格式的文档,如我们常用的Word文档、PPT等。当然,本系列博客只涉及Excel的读写操作,至于其他格式的文档操作,读者可以自行研究。
Excel简单介绍
Excel版本介绍
首先,我们看到百度百科中关于Apache POI
基本功能关于Excel的介绍:
我们会发现Excel有两个版本,分别是HSSF
以及XSSF
:
- HSSF - 提供读写Microsoft Excel格式档案的功能。
- XSSF - 提供读写Microsoft Excel OOXML格式档案的功能
那么,这两个版本有什么区别呢?
首先,文件的后缀名不同:
HSSF
版本为03版本的Excel文件 — 它的后缀名为.xls
XSSF
版本为07版本的Excel文件 — 它的后缀名为.xlsx
如图所示:
其次,03版本的.xls
Excel文件最多为65536行:
而,07版本的.xlsx
Excel文件则最多为1048576行,刚好是65536也就是03版本的**16倍**
:
Excel基本元素
我们都知道在Java中万物皆可为对象,那么我们在Java中操作Excel都是操作哪些对象呢?
这里我就不卖关子了,它们分别是:
- 工作簿
- 工作表
- 行
- 列
如图所示:
毕竟,我们只有精确到哪个工作簿 -> 哪个工作表 -> 哪行 -> 哪列,才能明确到具体的单元格!!!
开整
导入依赖
首先,我们在SpringBoot工程的依赖管理文件pom.xml
中导入我们所需要的依赖:
<!-- xls(03) --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency><!-- xlsx(07) --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency><!-- 日期格式化工具 --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.1</version></dependency><!-- 测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>
本地写入
本地写入的话,为了方便我们直接写入到当前.java文件所在的路径就好了。
在IDEA中,要快速获取当前的绝对路径的话:
首先,鼠标右键当前的包,然后选择
Copy Path...
:
其次,鼠标左键选择
Absolute Path
,然后再粘贴即可:
03版本 or 07版本?
用
POI
操作Excel选择03版本,还是07版本。除了所需的依赖不同之外,代码上只有最开始的创建工作簿的代码一行以及生成文件名的后缀不同而已。
如,03版本,后缀名为.xls
,创建工作簿代码为:
// 创建一张工作簿
Workbook workbook = new HSSFWorkbook();
而,07版本,后缀名为.xlsx
,创建工作簿代码为:
// 创建一张工作簿
Workbook workbook = new XSSFWorkbook();
03版本
03版本本地写入excel代码如下:
package com.guqueyue.excel;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.File;
import java.io.FileOutputStream;/*** @ClassName ExcelWriteTest* @Description 写入03版本Excel测试* @Author 古阙月* @Date 2020/10/31 21:43* @Version 1.0**/
public class ExcelWriteTest {/*** 需要写入excel的路径*/private static final String PATH = "C:\\project\\study_demo\\springboot_demo\\src\\main\\java\\com\\guqueyue\\excel";@Testpublic void write03Test() throws Exception {// 创建一张工作簿Workbook workbook = new HSSFWorkbook();// 创建一张工作表Sheet sheet1 = workbook.createSheet("古阙月书单");/*** 创建第一行*/Row row1 = sheet1.createRow(0);// 创建第一行第一列Cell cell11 = row1.createCell(0);// 填值cell11.setCellValue("书名");// 创建第一行第二列Cell cell12 = row1.createCell(1);// 填值cell12.setCellValue("作者");// 创建第一行第三列Cell cell13 = row1.createCell(2);// 填值cell13.setCellValue("时间");/*** 创建第二行*/Row row2 = sheet1.createRow(1);// 创建第二行第一列Cell cell21 = row2.createCell(0);// 填值cell21.setCellValue("《平凡的世界》");// 创建第二行第二列Cell cell22 = row2.createCell(1);// 填值cell22.setCellValue("路遥");// 创建第二行第三列Cell cell23 = row2.createCell(2);// 填值cell23.setCellValue(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));// 用IO流生成一张Excel表(03版本)- 后缀.xlsFileOutputStream fileOutputStream = new FileOutputStream(PATH + File.separator + "古阙月的书单表03.xls");// 写入workbook.write(fileOutputStream);// 关流fileOutputStream.close();System.out.println("古阙月的书单表03.xls生成完毕!!!");}}
运行write03Test()
方法,可以看到控制台一道绿光闪过,控制台打印出了古阙月的书单表03.xls生成完毕!!!,也生成了名为古阙月的书单表03.xls的文件:
点开一看,分毫不差,非常棒:
07版本
07版本本地写入excel代码如下:
package com.guqueyue.excel;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.File;
import java.io.FileOutputStream;/*** @ClassName ExcelWriteTest* @Description 写入07版本Excel测试* @Author 古阙月* @Date 2020/10/31 21:43* @Version 1.0**/
public class ExcelWriteTest2 {/*** 需要写入excel的路径*/private static final String PATH = "C:\\project\\study_demo\\springboot_demo\\src\\main\\java\\com\\guqueyue\\excel";/*** 需要写入excel的文件名称*/private static final String FILENAME = "古阙月的书单表07.xlsx";@Testpublic void write07Test() throws Exception {// 创建一张工作簿Workbook workbook = new XSSFWorkbook();// 创建一张工作表Sheet sheet1 = workbook.createSheet("古阙月书单2");/*** 创建第一行*/Row row1 = sheet1.createRow(0);// 创建第一行第一列Cell cell11 = row1.createCell(0);// 填值cell11.setCellValue("书名");// 创建第一行第二列Cell cell12 = row1.createCell(1);// 填值cell12.setCellValue("作者");// 创建第一行第三列Cell cell13 = row1.createCell(2);// 填值cell13.setCellValue("时间");/*** 创建第二行*/Row row2 = sheet1.createRow(1);// 创建第二行第一列Cell cell21 = row2.createCell(0);// 填值cell21.setCellValue("《挪威的森林》");// 创建第二行第二列Cell cell22 = row2.createCell(1);// 填值cell22.setCellValue("村上春树");// 创建第二行第三列Cell cell23 = row2.createCell(2);// 填值cell23.setCellValue(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));// 用IO流生成一张Excel表(03版本)- 后缀.xlsxFileOutputStream fileOutputStream = new FileOutputStream(PATH + File.separator + FILENAME);// 写入workbook.write(fileOutputStream);// 关流fileOutputStream.close();System.out.println(FILENAME + "生成完毕!!!");}}
同样的,运行write07Test()
方法,可以看到控制台一道绿光闪过,控制台打印出了古阙月的书单表07.xlsx生成完毕!!!,也生成了名为古阙月的书单表07.xlsx的文件:
点开一看,也是分毫不差,非常棒:
好了,使用Apache POI
实现Excel基本的写入操作就完成了。敬请期待下期博客哦!!!
在本期博客中给大家介绍了Apache POI在本地写入Excel的基本操作。但可能很多朋友就会问了:在实际操作中,我们一般都是采用实体类集合来写入数据的吧。总不可能一个单元格一个单元格去填写吧?
是的。所以下期博客来了,给大家带来一个进阶版,通过实体类集合来写入数据:
【Apache POI】Excel操作(二):Excel本地写入基本操作的实现(进阶版)
参考资料:【狂神说Java】POI及EasyExcel一小时搞定通俗易懂
【Apache POI】Excel操作(一):Excel本地写入基本操作的实现相关推荐
- Apache POI组件操作Excel,制作报表(四)
Apache POI组件操作Excel,制作报表(四) 博客分类: 探索实践 ExcelApacheSpringMVCServlet 上一篇我们介绍了如何制作复杂报表的分析和设计,本篇结合Sprin ...
- 【Apache POI】Java 读取Excel文件
Excel内容如下: 封装Excel行列字段的Bean: public class Employee {private String name;private String gender;privat ...
- 利用Apache POI读取并解析Excel的数据
/* * Created on 2010-12-9 * java读取excel文件 * */ import java.io.FileInputStream; import java.io.Fi ...
- SpringMVC + Apache POI 实现WEB中Excel下载功能
欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...
- 计算机excel操作教程,Excel操作教程 -电脑资料
Excel是一个全能的电子表格,它功能强大.操作方面,除了可以快速地生成.格式化各种表格外,还可以对表格中的数据完成很多数据库的功能,本人在使用Excel过程中,学到了一些非常实用的技巧,相信掌握这些 ...
- vb.net 教程 10-2 Excel操作1 Excel文件的打开
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的. 为了便于理解Excel操作,我做了一个示意图 1.打开Excel,相当于新建了一个Applica ...
- C#实战007:Excel操作-创建Excel并保存
这是通过Excel组件进行Excel文件创建并保存的方法,注释都写在程序中了. using System; using System.Collections.Generic; using System ...
- Python Excel操作模块XlsxWriter之写入数组公式worksheet.write_array_formula()
worksheet.write_array_formula() write_array_formula(first_row, first_col, last_row, last_col, formul ...
- python在excel中写入公式_Python Excel操作模块XlsxWriter之写入公式write_formula()
worksheet.write_formula() write_formula(row, col, formula[, cell_formula[, value]]) 向工作表单元格写入公式. 参数: ...
最新文章
- MySQL的安装配置(win7 64-bit)
- python---简单的接口测试实例
- 创建和准备Oracle样例数据库
- 三十岁前不必在乎的三十件事
- C++ 类型转换 :C语言的类型转换、C++的四种强制类型转换、explicit
- 算法竞赛入门经典(第二版) | 例题5-3 安迪的第一个字典 (紫书牛啤!)(UVa10815,Andy's First Dictionary)
- linux php运行用户名和密码,Linux实例(一)使用用户名密码验证连接Linux
- java中怎么从键盘读取字符_java键盘读取字符
- 解决pytorch训练的过程中内存一直增加的问题
- TensorFlow 教程 --教程--2.9曼德布洛特(Mandelbrot)集合
- C语言isupper函数介绍、示例和实现
- mac存储空间管理与df命令看到的剩余空间不一样的问题
- Jquery基础笔记
- 怎么更改计算机的搜索设置,电脑浏览器默认搜索引擎的设置不了怎么办
- Sql server 2008
- HyperSnap编辑捕获图像,hypersnap截动图
- 独立思考者的思考模型----智商160以上的人都应该学会的(摘自杜牛牛博客)
- 华为担纲建设基础软硬件国家新一代AI开放创新平台
- app性能测试怎么做
- 基于HTML5 Canvas实现黑白滤镜
热门文章
- Axure元件之文本框的案例
- android天女散花效果_维摩说法,天女散花——刘松年《天女献花图》赏析
- 【Microsoft Azure 的1024种玩法】二十四.通过Azure Front Door 的 Web 应用程序防火墙来对 OWASP TOP 10 威胁进行防御
- 《给研究生的学术建议》13——研究设计
- Java入门(3)—— 数组
- SQL查询每个站点消费金额最高的人
- 微信小程序基于vant和springboot实现附件上传和预览
- 什么是绝对、相对定位
- win10下pip安装pytorch-gpu以及CUDA/cuDnn的配置(避坑)
- 产生论文高重复率的原因及降重方法