`

java解释excel(POI) 设计原理与实践

阅读更多

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		|	

  

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics