Apache POI读写Excel
Apache POI是Apache软件基金会的开放源码函式库,POIAPI给Java程序对Microsoft Office格式档案读和写的功能。
官方文档
[//poi.apache.org/]
相关类
类名 |
对应文件类型 |
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"));
}
}