1. poi 包的介绍
Apache POI是Apache软件基金会的开放源码函式库,
POI提供API给Java程式对Microsoft Office格式档案读和写的功能。
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。
2.在这里我们介绍一下典型的类型就OK
这里我们来介绍excel 是怎么解释的,当然像word、ppt、visio 是同理的
原理: 某管理员要查某层楼有多少人叫什么名字?
1)首先要明确大楼在那里(找到对应的文件)
2)其次要明确是在第几单元(找到对应的sheet)
3)在找到第几层楼(对应的row)
4)敲门问住户户主先生/小姐的姓名(cell)
就这样就实现了,我们查找某层楼的户主信息了。是不是很简单
我们来看一下用poi 程序包怎么来实现excel 文件的解释工作
注意第四项有先生/小姐所以有一条是重点就是类型string、int、function 等
package com.test; import java.io.FileInputStream; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; /** * @see poi 设计原理介绍 * @author liuqing * */ public class TestA { public static void main(String args[]) throws Exception { //找到大楼的位置 FileInputStream input = new FileInputStream("d:\\usb.xls"); //告诉管理员 POIFSFileSystem f = new POIFSFileSystem(input); //走到大楼楼下 HSSFWorkbook wb = new HSSFWorkbook(f); //确认自己走到第几单元 HSSFSheet sheet = wb.getSheetAt(0); //看一看有没有楼层 Iterator rows = sheet.rowIterator(); while (rows.hasNext()) { //如果有我们一层层问 HSSFRow row = (HSSFRow)rows.next(); Iterator cells = row.cellIterator(); //如果有人开门 while(cells.hasNext()) { //我们一户一户的登记 HSSFCell cell = (HSSFCell) cells.next(); //是先生还是小姐(对应的数据类型) System.out.print(cell.getStringCellValue() + "====|==="); } System.out.println(""); } } }
为了方便于正确的读取我们做了一个封装
package com.test; import java.io.FileInputStream; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Cell; /** * @see poi 设计原理介绍 * @author liuqing * */ public class TestA { public static void main(String args[]) throws Exception { //找到大楼的位置 FileInputStream input = new FileInputStream("d:\\dir.xls"); //告诉管理员 POIFSFileSystem f = new POIFSFileSystem(input); //走到大楼楼下 HSSFWorkbook wb = new HSSFWorkbook(f); //确认自己走到第几单元 HSSFSheet sheet = wb.getSheetAt(0); //看一看有没有楼层 Iterator rows = sheet.rowIterator(); while (rows.hasNext()) { //如果有我们一层层问 HSSFRow row = (HSSFRow)rows.next(); Iterator cells = row.cellIterator(); //如果有人开门 while(cells.hasNext()) { //我们一户一户的登记 HSSFCell cell = (HSSFCell) cells.next(); //是先生还是小姐(对应的数据类型) int cellType = cell.getCellType(); System.out.print(getValue(cell,cellType)); } System.out.println(""); } } /** * 值对象封装 * @param cell * @param cellType * @return */ public static Object getValue(Cell cell,int cellType) { if (cellType == Cell.CELL_TYPE_NUMERIC) { return cell.getNumericCellValue() + " | "; } else if (cellType == Cell.CELL_TYPE_STRING) { return cell.getRichStringCellValue() + " | "; } else if (cellType == Cell.CELL_TYPE_BOOLEAN) { return cell.getBooleanCellValue() + " | "; } else if (cellType == Cell.CELL_TYPE_FORMULA) { return cell.getCellFormula() + " | "; } else if (cellType == Cell.CELL_TYPE_BLANK) { return "" + " | "; } else if (cellType == Cell.CELL_TYPE_ERROR) { return "" + " | "; } else { return "" + " | "; } } }
运行结果
编号 | 出生年月日 | 性别 | 美好 | 2134.0 | 40453.0 | 21.0 | 213.0 | SSS | 40453.0 | 22.0 | 3321.0 | AS | 40453.0 | 23.0 | 3322.0 | DSADSA | 40453.0 | 24.0 | 3323.0 | 2134.0 | 40453.0 | 25.0 | 3324.0 | DSADSA | 40453.0 | 26.0 | 3325.0 | DSADSA | 40453.0 | 27.0 | 3326.0 | AS | 40453.0 | 28.0 | 3327.0 | 40453.0 | 40453.0 | 29.0 | 3328.0 | 40453.0 | 40453.0 | 30.0 | 3329.0 | 40453.0 | 40453.0 | ASAD | DASD | 2123321.0 | 40453.0 | DSA | DSAD |