一、POI简介
:
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
HSSF 是Horrible SpreadSheet Format的缩写,通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。
HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。
二、POI结构说明
包名称说明
1、 HSSF提供读写Microsoft Excel XLS格式档案的功能。 XSSF提供读写Microsoft Excel OOXML
2、XLSX格式档案的功能。 HWPF提供读写Microsoft Word DOC格式档案的功能。 HSLF提供读写Microsoft
3、PowerPoint格式档案的功能。 HDGF提供读Microsoft Visio格式档案的功能。 HPBF提供读Microsoft
4、Publisher格式档案的功能。 HSMF提供读Microsoft Outlook格式档案的功能。
三、POI常用类说明
类名 | 说明 |
---|---|
HSSFWorkbook | Excel的文档对象 |
HSSFSheet | Excel的表单 |
HSSFRow | Excel的行 |
HSSFCell | Excel的格子单元 |
HSSFFont | Excel字体 |
HSSFDataFormat | 格子单元的日期格式 |
HSSFHeader | Excel文档Sheet的页眉 |
HSSFFooter | Excel文档Sheet的页脚 |
HSSFCellStyle | 格子单元样式 |
HSSFDateUtil | 日期 |
HSSFPrintSetup | 打印 |
HSSFErrorConstants | 错误信息表 |
四、Excel的基本操作
得到Excel常用对象
//获得Excel对象
@Test
public void testExcel1(){
try {
//获取系统文档
POIFSFileSystem fspoi=new POIFSFileSystem(new FileInputStream("/Users/wangjun/temp/demo1.xls"));
//创建工作薄对象
HSSFWorkbook workbook=new HSSFWorkbook(fspoi);
//创建工作表对象
HSSFSheet sheet=workbook.getSheet("sheet1");
//得到Excel表格
HSSFRow row = sheet.getRow(1);
//得到Excel工作表指定行的单元格
HSSFCell cell = row.getCell(1);
System.out.println(cell);
} catch (IOException e) {
e.printStackTrace();
}
}
03 创建Excel文档(最多只能处理65536行,否则会抛出异常)
@Test
public void To03() throws IOException {
// 创建Excel工作表
Workbook workbook = new HSSFWorkbook ();
// 创建 明为 琻喜 的工作表
Sheet sheet = workbook.createSheet ("琻喜");
// 创建 row 第一行
Row row = sheet.createRow (0);
// 创建第1格
Cell cell1 = row.createCell (0);
cell1.setCellValue ("姓名");
// 创建第2格
Cell cell2 = row.createCell (1);
cell2.setCellValue ("性别");
// 创建 row 第二行
Row row2 = sheet.createRow (1);
// 创建第一格
Cell cell21 = row2.createCell (0);
cell21.setCellValue ("jx");
// 创建第2格
Cell cell22 = row2.createCell (1);
cell22.setCellValue (19);
// 新建文件流
FileOutputStream fileOutputStream = new FileOutputStream (path + "琻喜03.xls");
//把相应的Exce1工作簿存盘
workbook.write (fileOutputStream);
fileOutputStream.close ();
}
07 创建Excel文档(没有行数限制)
@Test
public void To07() throws IOException {
// 创建Excel工作表
Workbook workbook = new XSSFWorkbook ();
// 创建 明为 琻喜 的工作表
Sheet sheet = workbook.createSheet ("琻喜");
// 创建 row 第一行
Row row = sheet.createRow (0);
// 创建第1格
Cell cell1 = row.createCell (0);
cell1.setCellValue ("姓名");
// 创建第2格
Cell cell2 = row.createCell (1);
cell2.setCellValue ("性别");
// 创建 row 第二行
Row row2 = sheet.createRow (1);
// 创建第一格
Cell cell21 = row2.createCell (0);
cell21.setCellValue ("jx");
// 创建第2格
Cell cell22 = row2.createCell (1);
cell22.setCellValue (19);
Cell cell23 = row2.createCell (2);
cell23.setCellValue (new DateTime ().toString ("yyyy-MM-dd HH:mm:ss"));
// 新建文件流
FileOutputStream fileOutputStream = new FileOutputStream (path + "琻喜07.xlsx");
//把相应的Exce1工作簿存盘
workbook.write (fileOutputStream);
fileOutputStream.close ();
}
大文件写SXSSF
1、优点:可以写非常大的数据量,如100万条甚至更多条,写数据速度快,占用更少的内存
2、注意:
过程中会产生临时文件,需要清理临时文件默认由100条记录被保存在内存中,如果超过这数量,则最前面的数据被写入临时文件
如果想自定义内存中数据的数量,可以使用new SXSSFWorkbook ( 数量 )