一、相关介绍
POI技术
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
poi-ooxml能解析xls,xlsx。
poi能解析word、ppt、excel、xml等office软件
导入坐标:
XML
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
二、使用案例
通过Poi操作Excel十分方便:
使用 WorkbookFactory类 的create()方法解析出excel所有数据
将一个Excel抽象为一个Workbook:
sheets 对象中保存了excel中所有的数据
一个表单页抽象为Sheet,表单中的一行抽象为Row,一行中的一个单元格可以抽象为Cell。
HSSFWorkbook对应的是97-03格式(.xls)
XSSFWorkbook对应的是07格式的(.xlsx)
Workbook的获取------可以通过WorkbookFactory
根据传入excel文件的类型来调用不同的实现类(子类):
WorkbookFactory------创建Workbook;
1、读:
java
//Excel 解析 去读 写入 poi esaypoi
1、输入流加载excel文件
2、使用POI解析excel------ Workbook sheets = WorkbookFactory.create(fis)
------------ sheets 对象中保存了excel中所有的数据
3、获取指定sheet ------------ Sheet sheet = sheets.getSheetAt(0)
------------ getSheetAt------根据索引索取
4、获取所有row ------------ Row row = sheet.getRow(3);//获取第四行
5、获取所有cell --------------- Cell cell = row.getCell(1);//获取第二列
//getCell重载的方法【丢失单元格策略】:如果cell不是空,不做任何事;
//如果单元格是空的,默认返回一个null,则new一个Cell()返回 保证不会报空指针
Cell cell = row.getCell(j, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
6、获取所有cell中的内容------------ cell.getStringCellValue()
cell.setCellType(CellType.STRING);//强行把cell的类型设置为String
//防止报错:Cannot get a STRING value from a NUMERIC cell
2、写------回写 修改
回写------基于最大的sheets对象来回写 因为sheet、row、cell可能都有改动
回写可以写到已经有的文件或者不存在的文件:
如果是已经存在的文件,那么会清空再写进去,有风险
如果是不存在的文件,那么会新建
如果文件已经打开,那么写不进去
java
public class WriteExcel {
public static void main(String[] args) throws Exception {
//2、修改excel
//2.1创建流
FileInputStream fis2 = new FileInputStream("src/test/resources/例子.xlsx");
//2.2使用POI解析excel
Workbook sheets = WorkbookFactory.create(fis2);
fis2.close();
//2.3 获取指定sheet
Sheet sheet2 = sheets.getSheetAt(0);
//2.4 获取指定row
Row row2 = sheet2.getRow(3);
//2.5 获取指定cell
Cell cell2 = row2.getCell(1);
//2.6 修改cell内容
cell2.setCellValue("我安撕家");
/*
其实是把内容都拿到放在sheets里面,修改一个,再写进去,相当于删除掉重新写入
*/
FileOutputStream fos2 = new FileOutputStream("src/test/resources/例子回写.xlsx");
sheets.write(fos2);
}
}
3、写------创建
java
public class CreateExcelLearn {
//创建excel
0、在盘下创建一个文件夹
1、定义工作薄,创建HSSFWorkbook对象(excel的文档对象)
2、创建输出流
3、建立新的sheet对象(excel的表单)Sheet sheet = sheets.createSheet(sheet名称);
// Row row = sheet.createRow(0);
// Cell cell = row.createCell(0);
// cell.setCellValue("具体要填写的内容");
4、将workbook写入流
5、关流
public static void main(String[] args) throws Exception {
/*
在盘下创建一个文件夹
*/
String directory = "/Users..";
File file = new File(directory); // 创建文件夹对象
if (!file.exists()) {// 如果不存在就创建
file.mkdirs();
}
//HSSFWorkbook implements Workbook
//1、定义工作薄,创建HSSFWorkbook对象(excel的文档对象)
Workbook wb = new HSSFWorkbook();
//2、创建输出流
FileOutputStream fileout = new FileOutputStream("/Users/..创建.xls");
// 3、建立新的sheet对象(excel的表单)
Sheet sheet = wb.createSheet("Sheet页1");// 定义sheet页面
// 4、在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一
Row row = sheet.createRow(0);// 创建第一行
Cell cell = row.createCell(0);// 创建一个单元格,第一列。
cell.setCellValue("cy的第一行第一列");//设置值
//5、设置第一行 第二列为3
row.createCell(1).setCellValue(3);
wb.createSheet("Sheet页2");// 定义sheet页面
// 6、将workbook写入流
wb.write(fileout);
// 7、关闭输出流
fileout.close();
}