POI读写excel简单教程
POI
简介
百度百科
- Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
基本功能
- HSSF - 提供读写Microsoft Excel格式档案的功能。
- XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
- HWPF - 提供读写Microsoft Word格式档案的功能。
- HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
- HDGF - 提供读写Microsoft Visio格式档案的功能。
如何下载
POM方式
<!-- poi主体 --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version> </dependency> <!-- poi对ooxml格式的支持 --> <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version> </dependency>
jar包方式
通过对pom文件进行分析poi依赖以下几个包,可自行下载导入
以poi 4.1.2为例
org.apache.poi:poi:4.1.2 org.apache.poi:poi-ooxml:4.1.2 org.apache.poi:poi-ooxml-schemas:4.1.2 org.apache.xmlbeans:xmlbeans:3.1.0 com.github.virtuald:curvesapi:1.06 com.zaxxer:SparseBitSet:1.2 commons-codec:commons-codec:1.13 org.apache.commons:commons-collections4:4.4 org.apache.commons:commons-math3:3.6.1 org.apache.commons:commons-compress:1.19
我这里下载好了,打包了一份,可以自行下载
正常文件名的为jar包
以javadoc结尾的为javadoc文档
以sources结尾的为源代码
文档和源代码可以自行选择要不要导入
操作Excel
写文件
简单写一个文件步骤
@Test public void testWrite() throws Exception {//设置文件路径String PATH = "D:\\";//1、创建一个工作簿//如果是要2007版本之前的是new HSSFWorkbook();文件名以xls结尾//如果是要2007版本之后的是new XSSFWorkbook();文件名以xlsx结尾Workbook workbook = new XSSFWorkbook();//2、创建一个工作表,参数可以填表的名字,不填就是默认名字SheetSheet sheet = workbook.createSheet();//3、创建一个行Row row = sheet.createRow(0);//4、创建一个单元格Cell cell = row.createCell(0);//5、为单元格赋值cell.setCellValue("1");//创建一个文件流,excel2007之前是xls结尾文件名,之后是xlsx结尾FileOutputStream fileOutputStream = new FileOutputStream(PATH + "testWrite.xlsx");//以文件流的新式输出workbook.write(fileOutputStream);//流使用完要关闭fileOutputStream.close(); }
运行后输出结果
从数据库读数据并输出
创建一个实体类
public class Student {int id;String name;String sex;Date birth;//省略构造器,getter,setter,toString等方法 }
写一个初始化该实体类的方法,应该是要从数据库中读取,为了方便,就直接赋值了
public List<Student> initStudentList(){List<Student> studentList=new ArrayList<>();studentList.add(new Student(11111111,"naclo1","男",new Date()));studentList.add(new Student(33333333,"naclo3","女",new Date()));studentList.add(new Student(44444444,"naclo4","男",new Date()));studentList.add(new Student(55555555,"naclo5","女",new Date()));studentList.add(new Student(66666666,"naclo6","男",new Date()));return studentList; }
创建表格
@Test public void testWriteStudentList() throws Exception {//设置文件路径String PATH = "D:\\";//获取学生列表,应该是从数据库中读取List<Student> studentList=this.initStudentList();//创建工作簿Workbook workbook = new XSSFWorkbook();//创建工作表Sheet sheet = workbook.createSheet("学生表");//3、设置表头,默认下标从0开始//可以对表头设置格式,请看下文Row row = sheet.createRow(0);row.createCell(0).setCellValue("学号");row.createCell(1).setCellValue("姓名");row.createCell(2).setCellValue("性别");row.createCell(3).setCellValue("生日");//循环为表赋值for (int rowNum = 1; rowNum <= studentList.size(); rowNum++) {//列表下标是从0开始,而循环是从1开始,所以下标要减一Student student = studentList.get(rowNum - 1);row = sheet.createRow(rowNum);//为正常的表格数据赋值row.createCell(0).setCellValue(student.getId());row.createCell(1).setCellValue(student.getName());row.createCell(2).setCellValue(student.getSex());//设置日期会是默认以数字形式输出,所以要对日期进行格式化,请看下文row.createCell(3).setCellValue(student.getBirth());}//输出学生表到目录FileOutputStream fileOutputStream = new FileOutputStream(PATH + "StudentList.xlsx");workbook.write(fileOutputStream);fileOutputStream.close(); }
运行后输出结果
设置日期会是默认以数字新式输出,所以要对日期进行格式化
//创建一个单元格 Cell cell = row.createCell(3); //为单元格赋值,为日期类型 cell.setCellValue(student.getBirth()); //把单元格设置为日期格式 CreationHelper createHelper = workbook.getCreationHelper(); CellStyle cellStyle = workbook.createCellStyle(); //把单元格设置为日期格式 cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd")); //单元格应用格式 cell.setCellStyle(cellStyle);
运行后输出结果
设置数字会是默认以字符串形式输出,所以要对格式进行修改,否则不好应用一些公式
整数
Cell cell = row.createCell(0); cell.setCellValue(student.getId()); CellStyle cellStyle = workbook.createCellStyle(); cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0")); cell.setCellStyle(cellStyle);
小数
Cell cell = row.createCell(0); cell.setCellValue(student.getId()); HSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00")); cell.setCellStyle(cellStyle);
为表头设置样式
//给第一行表头设置字体格式 Row row = sheet.getRow(0); for (int cellNum = 0; cellNum <4; cellNum++) {//创建格式CellStyle cellStyle = workbook.createCellStyle();//创建字体Font font = workbook.createFont();//设置字体font.setFontName("宋体");//字体设置为加粗font.setBold(true);//设置字体颜色,颜色是枚举类,可以点进HSSFColor自行查看font.setColor(HSSFColor.HSSFColorPredefined.RED.getIndex());//设置字体大小font.setFontHeightInPoints((short)20);//选择需要用到的字体格式cellStyle.setFont(font);//为单元格设置格式row.getCell(cellNum).setCellStyle(cellStyle); }
设置自适应列宽
//设置自适应列宽 sheet.autoSizeColumn(3);
读文件
简单读一个文件步骤,以前面输出的testWrite.xlsx文件为例
@Test public void testRead() throws Exception {//1、获取文件流FileInputStream inputStream = new FileInputStream(PATH + "testWrite.xlsx");//2、获得工作簿Workbook workbook = new XSSFWorkbook(inputStream);//3、获得工作表Sheet sheet = workbook.getSheetAt(0);//4、获得行Row row = sheet.getRow(0);//5、获得单元格Cell cell = row.getCell(0);//获取表的值String stringCellValue = cell.getStringCellValue();System.out.println("stringCellValue = " + stringCellValue);//流使用完要关闭inputStream.close(); }
输出结果
从读数据并进行持久化,以前面输出的StudentList.xlsx文件为例
写一个持久化方法,这里就简单的输出
public void saveStudent(Student student){System.out.println("student = " + student); }
读取文件
@Test public void testStudentList() throws Exception {//获取文件流FileInputStream inputStream = new FileInputStream(PATH + "StudentList.xlsx");//获得工作簿Workbook workbook = new XSSFWorkbook(inputStream);//获得工作表Sheet sheet = workbook.getSheetAt(0);//获取行数int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();//循环获取行,因为第一行是表头,所以跳过,下标从2开始for (int i = 1; i < physicalNumberOfRows; i++) {//获得行Row row = sheet.getRow(i);//注意,表格上的数据类型不同,获取数值的方法不同//获取数字类型的数据,返回值是double,这里强转为intint cell0 = (int)row.getCell(0).getNumericCellValue();//获取字符串类型的数据String cell1 = row.getCell(1).getStringCellValue();//获取字符串类型的数据String cell2 = row.getCell(2).getStringCellValue();//获取日期类型的数据Date cell3 = row.getCell(3).getDateCellValue();//对数据进行持久化操作saveStudent(new Student(cell0,cell1,cell2,cell3));}//流使用完要关闭inputStream.close(); }
运行后输出结果
POI读写excel简单教程相关推荐
- Perl读写Excel简单操作
Perl读写Excel简单操作 使用模块 Spreadsheet::ParseExcel Spreadsheet::WriteExcel 读Excel #!/usr/bin/perl -wuse st ...
- java 读取excel 图片_利用Java+POI 读写Excel文档向Excel中插入图片
一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97- ...
- jxl读写excel, poi读写excel,word, 读取Excel数据到MySQL
这篇blog是介绍: 1. java中的poi技术读取Excel数据,然后保存到MySQL数据中. 2. jxl读写excel 你也可以在 : java的poi技术读取和导入Excel 了解到写入Ex ...
- 使用poi读写excel文件
使用poi读写excel文件 Posted on 2011 年 03 月 16 日 by 苍之涛 今天一个同学需要处理一个excel文件,于是我便在网上搜了一下方法,顺便自己研究一下.刚刚参考网上资料 ...
- python pandas读取excel-Python使用Pandas读写EXCEL文件教程
欢迎,来自IP地址为:211.103.135.163 的朋友 教程开始之前,我们需要首先了解一下什么是Excel,这有助于理解之后教程中的内容. 什么是Excel Excel 是微软出品的和款办公软 ...
- POI读写Excel演练
前言 最近, 看了别人的博客, 说一个开发人员写了10年代码, 还不知道怎么去实现一个java处理excel文件的简单操作, WTFK! 我严重怀疑他在说我, 很明显我也不会, 所以你有福了, 和我一 ...
- Python使用Pandas读写EXCEL文件教程
https://www.daehub.com/archives/9463.html 教程 开始之前,我们需要首先了解一下什么是Excel,这有助于理解之后教程中的内容. 什么是Excel Excel ...
- python 读excel pandas_Python使用Pandas读写EXCEL文件教程
欢迎,来自IP地址为:140.250.89.180 的朋友 教程开始之前,我们需要首先了解一下什么是Excel,这有助于理解之后教程中的内容. 什么是Excel Excel 是微软出品的和款办公软件 ...
- java读写excel文件poi_Java利用POI读写Excel文件工具类
本文实例为大家分享了Java读写Excel文件工具类的具体代码,供大家参考,具体内容如下 package com.test.app.utils; import java.io.File; import ...
最新文章
- 组策略 从入门到精通 (七) 组策略的继承
- 后台返回不带http的图片路径前台怎么拼接_Shortcuts 教程:一键搞定公众号图片排版...
- jquery.chosen.js下拉选择框美化插件项目实例
- 微软加入了面向Java的Cloud Foundry
- 客户端相关知识学习(五)之什么是webView
- call和apply和bind的区别
- 人脸识别算法不可置疑?真相需要多重验证!
- Google 历年笔试面试30题
- nodejs的启动方式
- VS2010与QT的集成开发环境
- 2016年中国国际信息通信展览会在北京开幕
- python递归创建目录_Python学习第172课——Linux中一次性创建多层目录以及递归列出所有子目录...
- 中国银行业协会首席信息官高峰:银行函证区块链服务平台具备六大优势
- 马云获评《外交政策》全球十大思想者 影响全球经济变革
- roundcube mysql_Roundcube Webmail 安装配置
- PS(Photoshop)常用快捷键使用大全
- UE 简单存档读档功能
- 笔记本电脑电流声(滋啦滋啦声)解决方案
- lib与dll的关系(详解静态链接库和动态链接库)
- 5G+智能边缘,究竟会带来怎样的商业价值?
热门文章
- 8个常见的相亲交友源码前端防御性编程方案
- 分享未注册淘宝热卖域名
- 豌豆射手-第13届蓝桥杯Scratch选拔赛真题精选
- 如何下载展览路街道卫星地图高清版大图
- 成功解决 ValueError: Shape of passed values is (2, 3), indices imply (4, 3)
- OpenCV的三维重建实现方案
- Ubuntu12.04安装磊科NW336无线网卡
- DLL动态链接库生成及其動態调用(二)
- ScriptManager.RegisterStartupScript用法详解
- 全球及中国前置汽车中冷器行业需求趋势分析及发展规划研究报告2021-2027年版