Apache POI读写Excel
Apache POI是Apache软件基金会的开放源码函式库,POIAPI给Java程序对Microsoft Office格式档案读和写的功能。
官方文档
相关类
| 类名 | 对应文件类型 |
|---|---|
| HSSF | 读写Microsoft Excel XLS |
| XSSF | 读写Microsoft Excel OOXML XLSX |
| HWPF | 读写Microsoft Word DOC97 |
| XWPF | 读写Microsoft Word DOC2003 |
| XSLF | 读写Microsoft PowerPoint |
| XDGF | 读Microsoft Visio |
| XPBF | 读Microsoft Publisher |
| XSMF | 读Microsoft Outlook |
XLSX相关类及方法
常用类
| 类名 | 对应关系 |
|---|---|
| XSSFWorkbook | 工作薄(可以理解为.xlsx的文件) |
| XSSFSheet | Excel表(就是创建Excel文件时默认创建的Sheet1那种表格) |
| XSSFRow | 表格中的一行数据 |
| XSSFCell | 表格一行中的一个单元格 |
| XSSFCellStyle | 单元格样式 |
| XSSFFont | 字体 |
| XSSFHeader | Sheet的页眉 |
| XSSFFooter | Sheet的页脚 |
| DocumentSummaryInformation | 文件摘要信息 |
| CellRangeAddress | 单元格范围地址,通常合并单元格时使用 |
常用方法
构造方法
| 方法名 | 说明 |
|---|---|
| XSSFWorkbook() | |
| XSSFWorkbook(InputStream is) | (is为要读的文件的输入流) |
| XSSFWorkbook(File file) | 按文件对象读取 |
| XSSFWorkbook(String path) | 按文件路径读取 |
XSSFWorkbook常用方法
| 方法名 | 返回类型 | 说明 |
|---|---|---|
| getNumberOfSheets() | int | 获取工作薄中表的个数 |
| getSheet(String name) | XSSFSheet | 按表名获取表 |
| getSheetAt(int index) | XSSFSheet | 按表序号获取表 |
| getSheetIndex(String name) | int | 获取指定表名的表序号 |
| getSheetIndex(Sheet sheet) | int | 按表获取它的序号 |
| removeSheetAt(int index) | void | 删除指定序号的表 |
| write(OutputStream var1) | void | 将内存中的Excel写入到文件 |
| createCellStyle() | XSSFCellStyle | 创建一个单元格格式 |
XSSFSheet常用方法
| 方法名 | 返回类型 | 说明 |
|---|---|---|
| createRow(int rownum) | HSSFRow | 在指定行创建一个新行 |
| getRow(int index) | HSSFRow | 获取一行数据 |
| getFirstRowNum() | int | 获取从上到下第一行有数据的行所在行号 |
| getLastRowNum() | int | 获取从下到上第一行有数据的行所在行号 |
| addMergedRegion(CellRangeAddress region) | int | 合并单元格 |
| autoSizeColumn(int column) | void | 自动调整指定列的宽度 |
| setColumnWidth(int columnIndex, int width) | void | 设置某一列的宽度,width=字符个数 * 256,例如20个字符的宽度就是20 * 256 |
XSSFRow常用方法
| 方法名 | 返回类型 | 说明 |
|---|---|---|
| createCell(int column) | XSSFCell | 创建一个单元格 |
| createCell(int columnIndex, CellType type) | XSSFCell | 创建指定单元格格式的单元格 |
| getCell(int cellnum) | XSSFCell | 获取指定行中指定索引的单元格 |
| setHeight(short height) | void | 设置行高 |
XSSFCell常用方法
| 方法名 | 返回类型 | 说明 |
|---|---|---|
| setCellValue(String value) | void | 设置单元格内容 |
| setCellValue(double value) | void | 同上 |
| setCellValue(Date value) | void | 同上 |
| setCellValue(LocalDateTime value) | void | 同上 |
| setCellValue(Calendar value) | void | 同上 |
| toString() | String | 将单元格中的内容转换为String返回 |
| setCellFormula(String formula) | void | 设置单元格计算公式 |
| setCellStyle(CellStyle style) | void | 设置单元格格式 |
XSSFFont常用方法
| 方法名 | 返回类型 | 说明 |
|---|---|---|
| setColor(short color) | void | 设置字体颜色 |
| setBold(boolean bold) | void | 设置是否粗体 |
| setItalic(boolean italic) | void | 设置倾斜 |
| setUnderline(byte underline) | void | 设置下划线 |
XSSFCellStyle常用方法
| 方法名 | 返回类型 | 说明 |
|---|---|---|
| setFont(Font font) | void | 为单元格设置字体样式 |
| setAlignment(HorizontalAlignment align) | void | 设置水平对齐方式 |
| setVerticalAlignment(VerticalAlignment align) | void | 设置垂直对齐方式 |
| setFillForegroundColor(short bg) | void | 设置前景色 |
| setFillBackgroundColor(short bg) | void | 设置背景颜色 |
示例
导包
将下载下来的包中所有的docs文件夹同目录下的所有jar包、lib文件夹、ooxml-lib文件夹导入到工程中
读入
样例表
| 用户编号 | 用户名 | 密码 | 姓名 | 性别 | 年龄 |
|---|---|---|---|---|---|
| 1 | zs | 123 | 张三 | 男 | 18 |
| 2 | ls | ls | 李四 | 男 | 18 |
| 3 | rsb | rsb | rsb | 男 | 16 |
| 5 | rbj | rbj | rbj | 男 | 15 |
| 7 | ssq | ssq | ssq | 女 | 14 |
| 8 | iow | iow | iow | 男 | 7 |
| 9 | auf | auf | auf | 男 | 9 |
| 10 | atv | atv | atv | 男 | 12 |
| 11 | soc | soc | soc | 女 | 5 |
| 12 | wqo | wqo | wqo | 男 | 12 |
import org.apache.poi.xssf.usermodel.*;
import java.io.IOException;
import java.io.InputStream;
public class Main {
public static void main(String[] args) throws IOException {
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("test.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(is);
//获取索引为0的sheet表格
XSSFSheet sheet = workbook.getSheetAt(0);
//获取表格中有内容的首行行号
int first = sheet.getFirstRowNum();
//获取表格中有内容的尾行行号
int last = sheet.getLastRowNum();
//从首行开始获取,首行为表头
XSSFRow row = sheet.getRow(0);
XSSFCell cell = row.getCell(0);
System.out.print(cell.toString() + "\t");
cell = row.getCell(1);
System.out.print(cell.toString() + "\t");
cell = row.getCell(2);
System.out.print(cell.toString() + "\t");
cell = row.getCell(3);
System.out.print(cell.toString() + "\t");
cell = row.getCell(4);
System.out.print(cell.toString() + "\t");
cell = row.getCell(5);
System.out.println(cell.toString() + "\t");
for (int i = first + 1|i <= last|++i) {
row = sheet.getRow(i);
cell = row.getCell(0);
int uid = Integer.valueOf(cell.toString().replace(".0", ""));
cell = row.getCell(1);
String uname = cell.toString();
cell = row.getCell(2);
String upass = cell.toString();
cell = row.getCell(3);
String truename = cell.toString();
cell = row.getCell(4);
String sex = cell.toString();
cell = row.getCell(5);
int age = Integer.valueOf(cell.toString().replace(".0", ""));
System.out.println(new User(uid, uname, upass, truename, sex, age));
}
}
}
用户编号 用户名 密码 姓名 性别 年龄
1 zs 123.0 张三 男 18
2 ls ls 李四 男 18
3 rsb rsb rsb 男 16
5 rbj rbj rbj 男 15
7 ssq ssq ssq 女 14
8 iow iow iow 男 7
9 auf auf auf 男 9
10 atv atv atv 男 12
11 soc soc soc 女 5
12 wqo wqo wqo 男 12
写出
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Random;
public class Write {
public static void main(String[] args) throws IOException {
//新建一个工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
//在工作薄中新建一个名为写入的sheet表
XSSFSheet sheet = workbook.createSheet("写入");
//创建一行作为表头
XSSFRow row = sheet.createRow(0);
//向表头写入内容
XSSFCell cell = row.createCell(0);
cell.setCellValue("用户编号");
cell = row.createCell(1);
cell.setCellValue("用户名");
cell = row.createCell(2);
cell.setCellValue("密码");
cell = row.createCell(3);
cell.setCellValue("姓名");
cell = row.createCell(4);
cell.setCellValue("性别");
cell = row.createCell(5);
cell.setCellValue("年龄");
//写入其他内容同理
//测试合并单元格
row = sheet.createRow(1);
cell = row.createCell(0);
cell.setCellValue(1);
cell = row.createCell(1);
cell.setCellValue(2);
cell = row.createCell(2);
cell.setCellValue(3);
sheet.addMergedRegion(new CellRangeAddress(1,1,0,3));
cell = row.getCell(0);
//让工作薄创建一个单元格格式
XSSFCellStyle style = workbook.createCellStyle();
//设置水平对齐方式
style.setAlignment(HorizontalAlignment.CENTER);
//设置垂直对齐方式
style.setVerticalAlignment(VerticalAlignment.CENTER);
cell.setCellStyle(style);
workbook.write(new FileOutputStream("write.xlsx"));
}
}
Apache POI读写Excel的更多相关文章
- Apache POI 读写 Excel 文件
目录 写入 Excel 文件 读取 Excel 文件 遍历 Excel 文件 需要的 maven 依赖 完整代码 写入 Excel 文件 // 写入 Excel 文件 // ============= ...
- jxl读写excel, poi读写excel,word, 读取Excel数据到MySQL
这篇blog是介绍: 1. java中的poi技术读取Excel数据,然后保存到MySQL数据中. 2. jxl读写excel 你也可以在 : java的poi技术读取和导入Excel了解到写入Exc ...
- 使用Apache POI导出Excel小结--导出XLS格式文档
使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI ...
- [转]POI读写Excel 修改
[转]POI读写Excel 修改 一.Excel基础 二.HSSF概况 三.通过usermodel读取文件 四.通过usermodel写入文件 五.通过eventusermodel读取文件 六.HSS ...
- poi读写Excel
poi读写Excel 对于一个程序员来说,文件操作是经常遇到的,尤其是对Excel文件的操作. 在这里介绍一下我在项目中用到的一个操作Excel的工具——POI.关于POI的一些概念,网络上很多,详细 ...
- apache POI 导出excel相关方法
apache POI 操作excel无比强大.同时有操作word和ppt的接口. 下面讲解poi中常用方法. 1,设置列宽 HSSFSheet sheet = wb.getSheetAt(0); sh ...
- Java开发小技巧(六):使用Apache POI读取Excel
前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- 利用Apache POI操作Excel
最近在做接口,有个功能是利用Excel导入汽车发动机所需零件信息到线上系统中.简单回顾一下之前学过的用java操作Excel. 1.maven配置Apache POI pom.xml中配置POIjar ...
随机推荐
- VMware虚拟机中共享文件夹 开机启动
输入命令: sudo /usr/bin/vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o uid=1000 -o gid=1000 -o umask=02 ...
- rabbitmq 延时队列 插件方式实现 每条消息都延时自己时间
上篇文章的延时是加到队列上的 通过死信过时推送 ,缺点就是不能每条消息定义自己的过时时间而且每次有新的过时时间,要新建一个交换机和队列 https://www.cnblogs.com/brady-wa ...
- centos8安装fastdfs6.06集群方式一之:软件下载与安装
一,查看本地centos的版本 [root@localhost lib]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) 说 ...
- docker-docker-compose 安装
1.安装docker-compose(官网:https://github.com/docker/compose/releases) 安装: curl -L https://github.com/doc ...
- Flutter Webview添加Cookie的正确姿势
场景 h5页面要从cookie里面取数据,所以需要在flutter webview的cookie里面塞一些数据,设置的数据多达十几条:按照网上查的使用方式来设置,通过fiddler抓包发现,只能生效一 ...
- Compareto方法
很多时候我们写Compareto方法是用于排序,那么排序就涉及到数据位置交换. 所以要注意compareto返回值的含义,通过一个例子来看一下: 假设对象的num属性作为比较标准,对象为testVO ...
- 国内首个 .NET 5 框架 Fur 斩获 1000 stars,1.0.0-rc.final.20 发布
Fur 是 .NET 5 平台下企业应用开发最佳实践框架. 通往牛逼的路上,风景差得让人只想说脏话,但我在意的是远方. 啥环境 早在 1998 年微软公司对外发布 .NET/C# 平台的那 ...
- [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构
[阿里DIN] 深度兴趣网络源码分析 之 整体代码结构 目录 [阿里DIN] 深度兴趣网络源码分析 之 整体代码结构 0x00 摘要 0x01 文件简介 0x02 总体架构 0x03 总体代码 0x0 ...
- 【应用服务 App Service】 App Service Rewrite 实例 - 反向代理转发功能
问题描述 在使用Azure App Service(应用服务)时,有时候需要在不同的站点之间进行跳转,但是希望通过通过访问同一个域名的方式来实现反向代理.如果创建应用时候选择的是Window服务,这时 ...
- Mybatis---06Mybatis配置文件浅析(四)
参考链接:深入理解Mybatis插件开发 1.plugins:与其称为Mybatis插件,不如叫Mybatis拦截器,更加符合其功能定位,实际上它就是一个拦截器,应用代理模式,在方法级别上进行拦截. ...