`
daichangfu
  • 浏览: 260319 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Java POI 解析EXCLE

    博客分类:
  • java
阅读更多
package com.ceshi;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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;


public class DomExcel {

	/**
	 * 解析EXCLE
	 * @param is
	 * @return
	 */
	public static List<String[]> parseExcel(FileInputStream is){
		
		List<String[]> list = null ;
		
		try {
			POIFSFileSystem fs = new POIFSFileSystem(is);
			// 创建工作簿
			HSSFWorkbook workBook = new HSSFWorkbook(fs);
			
			//储存Excle的数据
			list = new ArrayList<String[]>();
			
			// 获得Excel中工作表个数
			//System.out.println("工作表个数 :" + workBook.getNumberOfSheets());
			for (int i = 0; i < workBook.getNumberOfSheets(); i++) {
				
				//System.out.println("第" + i + "个工作表名称:" + workBook.getSheetName(i));
				// 创建工作表
				HSSFSheet sheet = workBook.getSheetAt(i);
				int rows = sheet.getPhysicalNumberOfRows();				 // 获得行数
				if (rows > 0) {
					sheet.getMargin(HSSFSheet.TopMargin);
					for (int j = 0; j < rows; j++) { 					// 行循环
						HSSFRow row = sheet.getRow(j);
						if (row != null) {
							int cells = row.getLastCellNum();			// 获得列数
							
							String[] fieldValue = new String[cells];
							
							for (short k = 0; k < cells; k++) { 		// 列循环
								HSSFCell cell = row.getCell(k);

								String value = "";
								
								if (cell != null) {
									switch (cell.getCellType()) {
									
										case HSSFCell.CELL_TYPE_NUMERIC: // 数值型
											if (HSSFDateUtil.isCellDateFormatted(cell)) {
												// 如果是date类型则,获取该cell的date值
												value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
											} else {
												// 纯数字
												value = String.valueOf(cell.getNumericCellValue());
											}
											break;
											
										//此行表示单元格的内容为string类型 
										case HSSFCell.CELL_TYPE_STRING: 
											// 字符串型
											value = cell.getStringCellValue();
											break;
											
										case HSSFCell.CELL_TYPE_FORMULA:// 公式型
											// 读公式计算值
											value = String.valueOf(cell.getNumericCellValue());
											
											if (value.equals("NaN")) {
												// 如果获取的数据值为非法值,则转换为获取字符串
												value = cell.getStringCellValue();
											}
											break;
											
										case HSSFCell.CELL_TYPE_BOOLEAN:// 布尔
											value = ""+ cell.getBooleanCellValue();
											break;
											
										//此行表示该单元格值为空 
										case HSSFCell.CELL_TYPE_BLANK: // 空值
											value = "";
											break;
										case HSSFCell.CELL_TYPE_ERROR: // 故障
											value = "";
											break;
										default:
											value = cell.getStringCellValue();
									}
								}
								fieldValue[k] = value;
							}
							list.add(fieldValue);
						}
					}
				}
			}
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		
		return list;
	}
	
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics