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 ...
随机推荐
- 第十八章 HTTPS介绍及实战演练
一.HTTPS介绍 1.概述 为什么需要使用HTTPS,因为HTTP不安全,当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中是加密的,所以黑客无法窃取或者篡改数 ...
- CentOS7防止root密码被破解
破解root密码 为了防止服务器被破坏,为了守护业务的和平,在服务器安全方面,首先我们要做到密码的安全.那么知道如何破解root密码才能让我们有针对性的防护.另外如果我们忘掉了root密码,也能知道如 ...
- django—ORM相关
常用的QuerySet方法 1.all() 查询表中所有数据,返回一个QuerySet对象列表 2.filter() 查询满足条件的数据,返回一个QuerySet对象列表 3.get() 查询指定的数 ...
- CTCall简介(后续会继续补充)
使用CTCall需要导入CoreTelephony.framework框架. CTCall的基本使用 (1)初始化call CFStringRef number = CFSTR("15555 ...
- Maven2 ---- 安装及配置
Maven详解(二)------ Maven的安装配置 目录 1.下载 Maven 2.配置 Maven 环境变量 3.查看 Maven 环境变量是否配置成功 4.在 eclipse 中集成 Ma ...
- h5 返回上一页面方法
//以下方法仅供参考1.返回上一页,不刷新history.html window.history.go(-1); javascript:window.history.go(-1) 2.返回上一页并刷 ...
- IOS8 对flex兼容性问题
问题: IOS8.2 dispaly:flex:不生效: 注意一下兼容写法的顺序问题, display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Saf ...
- D. Regular Bridge 解析(思維、圖論)
Codeforce 550 D. Regular Bridge 解析(思維.圖論) 今天我們來看看CF550D 題目連結 題目 給你一個\(k\le100\),請構造出一個至少有一個Bridge的,每 ...
- uniapp使用swiper组件做tab切换动态获取高度
swiper对高度进行了限制,所以说通常做出了tab切换的效果但是内容经常被截取掉???? 所以我在前端做了一个动态获取高度的功能 选项卡标题也就是tab切换的效果 选项卡内容区域的高度自适应 因为进 ...
- 【Javac编译异常】javac编译提示jdk中的包找不到的问题error: package jdk.internal.org.objectweb.asm does not exist 和 error: cannot find symbol
一.复现步骤 1)编写待编译的java类 package f_asm_and_javassist; import jdk.internal.org.objectweb.asm.*; import ja ...