POI
仅作为个人学习使用,仅供参考,请勿拿做商用,否则本人有权追责。
1. 概述
POI是Apache推出的操作office格式的工具包,主要用于操作excel的读与写。
excel分为03版和07版,他们的区别是:
- 03 版的excel只能存储65536行
- 07版的无限制,因此占用内存也较大。
poi是一次读取数据到文件中,因此若数据量过大,可能导致内存溢出。
2. 入门
2.1 Excel中的对象
excel中的对象有四个:
-
工作簿,也就是单个excel的文件对象,对应于poi中即为
Workbook
对象,他有三个实现类:-
HSSFWorkbook:03版工作簿
-
XSSFWorkbook:07版工作簿
-
SXSSFWorkbook:07版工作簿增强版
-
工作表:也就是excel左下角的sheet,对应于POI中也就是
Sheet
对象。 -
行,对应于POI中也就是
Row
对象 -
单元格,对应于POI中也就是
Cell
对象
2.2 入门操作
操作excel导出的步骤具体分为四步:1. 创建一个工作簿;2. 创建一个工作表Sheet;3. 创建行;4 创建列
代码演示如下:
public class ExcelWriteTest{
@Test
public void testExcelWriteByPoi() throw IOException {
// 1. 创建一个工作簿
Workbook workbook = new HSSFWorkwork();
// 2. 创建工作表
Sheet sheet = workbook.createSheet();
// 3. 创建一行
Row row = sheet.createRow(0);// 第1行
// 4. 创建一列
Cell cell = row.createCell(0);// 第一行第一个单元格
cell.setCellValue("统计表");
//5. 生成文件
FileOutputStream fileOutputStream = new FileOutputStream("a"+".xls");
workbook.write(fileOutputStream);
fileOutputStream.close();
}
}
2.3 其他辅助操作(边框、字体、颜色、加粗、居中、换行、合并单元格)
2.3.1 合并单元格
public CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
方法
各个参数的含义为:
firstRow
:需要合并的开始行
lastRow
:需要合并的结束行
firstCol
:需要合并的第一个单元格。
lastCol
:需要合并的最后一个单元格。
代码演示:
// 1. 创建一个工作簿
Workbook workbook = new HSSFWorkwork();
// 2. 创建工作表
Sheet sheet = workbook.createSheet();
CellRangeAddress region = new CellRangeAddress(0, 0, 1, 3);// 合并第一行的第2-4个单元格
sheet.addMergedRegion(region);
PS:合并单元格之后,往单元格中存储数据的索引并不会改变。即合并单元格不会导致单元格消失。
2.3.2 单元格格式
需要生成一个单元格样式对象,即CellStyle
;
代码演示如下:
// 1. 生成一个单元格样式对象
CellStyle style = workbook.createCellStyle();
// 设置水平对齐属性:HorizontalAlignment(GENERAL:常规对齐;LEFT:左对齐;CENTER:居中对齐;RIGHT:右对齐)
style.setAlignment();
// 设置垂直对齐属性:VerticalAlignment(TOP:顶部对齐;CENTER:居中对齐;BOTTOM:底端对齐)
style.setVerticalAlignment(VerticalAlignment.CENTER);
// 设定边框
style.setBorderTop(BorderStyle.THIN);// 上边框
style.setBorderBottom(BorderStyle.THIN);// 下边框
style.setBorderLeft(BorderStyle.THIN);// 左边框
style.setBorderRight(BorderStyle.THIN);// 右边框
// 设置边框颜色
style.setLeftBorderColor();
style.setRightBorderColor();
style.setTopBorderColor();
style.setBottomBorderColor();
// 设置自动换行
style.setWrapText(true);
//设定填充样式
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
//设定背景颜色
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
// 设置字体样式
style.setFont(font);
2.3.3 字体样式
代码演示:
Font font = workbook.createFont();
font.setFontName("黑体");
font.setFontHeightInPoints((short) 16);//设置字体大小
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
2.3.4 列宽
代码演示:
sheet.setDefaultColumnWidth(20);
本文只提供简单的一个入门,具体方法的构造函数什么的需要自己去读源码,源码都有说明。