1Poi简介:
1.1什么是poi:
Apache POI [1] 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“简洁版的模糊实现”。
1.2poi结构:
HSSF [1] - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF [1] - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF [1] - 提供读写Microsoft Word DOC格式档案的功能。
HSLF [1] - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF [1] - 提供读Microsoft Visio格式档案的功能。
HPBF [1] - 提供读Microsoft Publisher格式档案的功能。
HSMF [1] - 提供读Microsoft Outlook格式档案的功能。
这些都是poi提供的一些包
1.3:下载地址
这个是最新的jar包,4.0的
https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-4.0.0-20180907.tar.gz
还有源码包的下载
https://www.apache.org/dyn/closer.lua/poi/release/src/poi-src-4.0.0-20180907.tar.gz
下载点击这个
2.poi基础
2.1.1新建一个表格
首先要将下载好的jar包,解压将根目录下的所有包,以及将lib目录下的commons-logging-1.2.jar
和junit-4.12.jar以及log4j-1.2.17.jar这三个通用包导入到项目的lib的目录下,poi-4.0.0.jar包是最
重要的。
public static void main(String[] args) throws IOException {//这里将异常上抛方便阅读和理解
/**
* 多态实现
* HSSFWorkbook 是对于xls进行操作
*/
Workbook wb=new HSSFWorkbook();//新建一个工作簿
/**
* 导出所以用到输出流
*参数为输出的地址
*/
FileOutputStream fout=new FileOutputStream("E:\\Demo\\poi.xls");
wb.write(fout);//Workbook提供了write的方法
fout.close();//将输出流关闭
}
2.1.2新建sheet页
在新建工作簿的基础上新建sheet页,wb.createSheet() 返回一个Sheet()如果不进行操作不用接收
这里省略了main方法
/**
* 多态实现
* HSSFWorkbook 是对于xls进行操作
*/
Workbook wb=new HSSFWorkbook();//新建一个工作簿
/**
* 导出所以用到输出流
*/
FileOutputStream fout=new FileOutputStream("E:\\Demo\\poi.xls");
/**
* 有有参和无参数两种
* 参数为sheet页的名字
* 不写参数默认名字为sheet0到n
*/
Sheet sheet1 = wb.createSheet();//创建一个sheet页
Sheet sheet2 = wb.createSheet("第二个sheet页");//创建第二个sheet页
wb.write(fout);
fout.close();//将输出流关闭
2.1.3新建行和列
创建行要在sheet页的基础上,单元格在行的基础上创建,每一行一个行对象Row
对于单元格赋值cell对象setCellValue()就可以,而且行和单元格的创建都从0 开始
列的值可以设置的类型也比较多样 int double String boolean Date 等都是可以的
Workbook wb=new HSSFWorkbook();//新建一个工作簿
FileOutputStream fout=new FileOutputStream("E:\\Demo\\poi.xls");
Sheet sheet= wb.createSheet("第一个sheet页");//创建一个sheet页
Row row=sheet.createRow(0); // 创建一个行 第一行
Cell cell=row.createCell(0); // 创建一个单元格 第1列
/**
* 给单元格设置值
*值类型可以为int double String boolean
*还有Date等
*/
cell.setCellValue(1);
row.createCell(1).setCellValue(1.2);//创建第一行第二个单元格
row.createCell(2).setCellValue("这是一个单元格");//创建第一行第三个单元格
row.createCell(3).setCellValue(false);//创建第一行第四个单元格
/**
* HSSFCell一些静态常量
* short类型和int类型
*/
row.createCell(4).setCellValue(HSSFCell.ENCODING_COMPRESSED_UNICODE);
/**
* 第二个行 每一行需要一个行对象
* 所以需要保存一个行对象
*/
Row row1 = sheet.createRow(1);
row1.createCell(0).setCellValue("第二行第一列");
row1.createCell(1).setCellValue(true);
row1.createCell(2).setCellValue("第二行第三列");
row1.createCell(3).setCellValue("第二行第四列");
wb.write(fout);//输出
fout.close();
2.1.4时间格式的单元格
由于很多代码都是重复的也出现了多次我在这,也就不写在笔记里了,只摘取了关键部分
CreationHelper 一个小工具类,使用工作簿创建Workbook getCreationHelper()
CellStyle 单元格的样式类,也是使用Workbook创建createCellStyle()
Row row=sheet.createRow(0); // 创建一个行 第一行
Cell cell=row.createCell(0); // 创建一个单元格 第1列
cell.setCellValue(new Date());
/**
* 小工具
* 使用工作簿获取
*/
CreationHelper creationHelper=wb.getCreationHelper();
/**
* 单元格样式类
* 使用工作簿Workbook创建
*/
CellStyle cellStyle=wb.createCellStyle();
/**
* 设置时间的显示格式
*/
cellStyle.setDataFormat(creationHelper.createDataFormat().getFormat("yyyy-mm-dd :hh:mm:ss"));
cell=row.createCell(1);//创建第二列
cell.setCellValue(new Date());
/**
* 设置单元格的格式
*/
cell.setCellStyle(cellStyle);
/**
* 第三列和第二列的效果是一样的
*/
cell=row.createCell(2);//创建第三列
/**
* Calendar 日历类 也可以用来获取时间
*/
cell.setCellValue(Calendar.getInstance());
cell.setCellStyle(cellStyle);
剩下的内容将在下面的博客持续更新,有什么问题的地方欢迎大家指正,大家共同进步