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 ...
随机推荐
- go 虎牙爬取
package main import ( "fmt" "github.com/antchfx/htmlquery" "io/ioutil" ...
- Anderson《空气动力学基础》5th读书笔记 第0记——白金汉PI定理
目录 量纲分析:白金汉PI定理 相似参数 量纲分析:白金汉PI定理 在空气动力学中,飞机的空气动力主要由自由来流的密度ρ∞,自由来流数V∞,翼弦长度c,自由来流的粘性系数μ∞以及音速a∞,所以假设我们 ...
- JS DIV列表自动滚动带停顿,滚动到底部后自动滚动到顶部
setInterval -- 间隔执行函数:element.scrollTop -- 元素滚动条距头部的距离: 因为执行代码需要时间,所以最终动态时间会比设置的要慢 var slide = new S ...
- ssh执行命令
执行一条命令 ssh user@ip command 执行多条命令 ssh user@ip "command1;command2" #分号隔开 关于转义 ssh user@ip ' ...
- RocketMQ单节点搭建
RocketMQ服务搭建 下载RocketMQ源码: http://mirror.bit.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-source- ...
- ERROR [RMI TCP Connection(3)-127.0.0.1] - init datasource error
运行报错 ERROR [RMI TCP Connection(3)-127.0.0.1] - init datasource error, url: jdbc:mysql://localhost:33 ...
- if当中是赋值怎么办
1.Java中,赋值是有返回值的 ,赋什么值,就返回什么值.比如这题,x=y,返回y的值,所以括号里的值是1. 2.Java跟C的区别,C中赋值后会与0进行比较,如果大于0,就认为是true:而Jav ...
- vue项目中mockjs的使用
mock.js是一个库,源码托管:https://github.com/nuysoft/Mock github上的原话:Mock.js是一个模拟数据生成器,可帮助前端开发和原型与后端进度分开,并减少某 ...
- ERP应收应付的操作与设计--开源软件诞生21
赤龙ERP应收应付讲解--第21篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon/r ...
- 4G DTU的通信距离是多少
4G是现今应用非常广泛的一种通信技术,主要是为广义的远程信息处理提供服务.随着计算机与各种具有处理功能的智能设备在各领域的日益广泛使用,数据通信的应用范围也日益扩大.在物联网领域中,4G是移动设备实现 ...