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 ...
随机推荐
- Seaborn系列 | 散点图scatterplot()
散点图 解读 可以通过调整颜色.大小和样式等参数来显示数据之间的关系. 函数原型 seaborn.scatterplot(x=None, y=None, hue=None, style=None, s ...
- c++ stl库中的set
简单说来 set(集合)里的元素 不会有相同元素(也就是说 相同的值不存 )并且 存进去会自动排序 类比sort默认排序从小到大 set排序也是 set/multiset会根据待定的排序准则,自动将 ...
- 支持向量机SVM基本问题
1.SVM的原理是什么? SVM是一种二类分类模型.它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器.(间隔最大是它有别于感知机) 试图寻找一个超平面来对样本分割,把样本中的正例和反例 ...
- Optimal binary search trees
问题 该问题的实际应用 Suppose that we are designing a program to translate text from English to French. For ea ...
- Charles使用part5——模拟慢网络
一.配置参数解析: bandwidth -- 带宽,即上行.下行数据传输速度utilisation -- 带宽可用率,大部分modern是100%round-trip latency -- 第一个请求 ...
- 【Azure 环境】存储在Azure上的文件,使用IE/Edge时自动打开的问题,如何变为下载而非自动打开
问题描述 存储,作为云服务最重要的一部分.当需要从云存储中下载文件时,时常面临一些格式的文件被浏览器自动打开而非下载,那如何来解决这个问题呢? 在Azure中,存储的服务有以下方式: Azure Bl ...
- (2)ASP.NET Core3.1 Ocelot路由
1.路由 前一个章节我们已经介绍过Ocelot,相信大家也了解到,Ocelot的主要功能是接收客户端等传入的HTTP请求,并将其转发到下游服务.Ocelot当前仅以另一个http请求的形式支持此功能( ...
- 一个 Task 不够,又来一个 ValueTask ,真的学懵了!
一:背景 1. 讲故事 前几天在项目中用 MemoryStream 的时候意外发现 ReadAsync 方法多了一个返回 ValueTask 的重载,真是日了狗了,一个 Task 已经够学了,又来一个 ...
- egit版本对应关系。
egit版本对应关系. http://wiki.eclipse.org/EGit/FAQ#What_versions_of_Eclipse_does_EGit_target.3F
- fork 子进程,父进程对于变量的共享
经过代码的练习发现: fork创建的子进程会完全复制父进程的代码包括变量,既复制fork之前创建的变量. 但是在创建子进程后,子进程与父进程对同一个变量的改变将相互不受影响,即使获取同一变量的地址是一 ...