打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
poi读取excel
package com.Environment.util;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;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 ReadExcel {	private POIFSFileSystem fs;	private HSSFWorkbook wb;	private HSSFSheet sheet;	private HSSFRow row;	//private int hssfrow = 0;	/**	 * 读取Excel表格表头的内容	 * @ps  1. 首行不能为空、 2. 当有单元合并的时候,计算有问题	 * @param InputStream	 * @return String 表头内容的数组	 */	@SuppressWarnings("deprecation")	public String[] readExcelTitle(InputStream is) {		try {			fs = new POIFSFileSystem(is);			wb = new HSSFWorkbook(fs);		} catch (IOException e) {			e.printStackTrace();		}		sheet = wb.getSheetAt(0);		row = sheet.getRow(0);		// 标题总列数		int colNum = row.getPhysicalNumberOfCells();		System.out.println("colNum:" + colNum);		String[] title = new String[colNum];		for (int i = 0; i < colNum; i++) {			title[i] = getCellFormatValue(row.getCell((short) i));		}		return title;	}	/**	 * 读取Excel数据内容	 * 	 * @param InputStream	 * @return Map 包含单元格数据内容的Map对象	 */	@SuppressWarnings("deprecation")	public Map readExcelContent(InputStream is) {		Map content = new HashMap();		String str = "";		try {			fs = new POIFSFileSystem(is);			wb = new HSSFWorkbook(fs);		} catch (IOException e) {			e.printStackTrace();		}		sheet = wb.getSheetAt(0);		// 得到总行数		int rowNum = sheet.getLastRowNum();		row = sheet.getRow(0);		int colNum = row.getPhysicalNumberOfCells();		// 正文内容应该从第二行开始,第一行为表头的标题		for (int i = 1; i <= rowNum; i++) {			row = sheet.getRow(i);			int j = 0;			while (j < colNum) {				// 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据				// 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean				// str += getStringCellValue(row.getCell((short) j)).trim() +				// "-";				str += getCellFormatValue(row.getCell((short) j)).trim()						+ "    ";				j++;			}			content.put(i, str);			str = "";		}		return content;	}	/**	 * 获取单元格数据内容为字符串类型的数据	 * 	 * @param cell	 *            Excel单元格	 * @return String 单元格数据内容	 */	@SuppressWarnings("unused")	private String getStringCellValue(HSSFCell cell) {		String strCell = "";		switch (cell.getCellType()) {		case HSSFCell.CELL_TYPE_STRING:			strCell = cell.getStringCellValue();			break;		case HSSFCell.CELL_TYPE_NUMERIC:			strCell = String.valueOf(cell.getNumericCellValue());			break;		case HSSFCell.CELL_TYPE_BOOLEAN:			strCell = String.valueOf(cell.getBooleanCellValue());			break;		case HSSFCell.CELL_TYPE_BLANK:			strCell = "";			break;		default:			strCell = "";			break;		}		if (strCell.equals("") || strCell == null) {			return "";		}		if (cell == null) {			return "";		}		return strCell;	}	/**	 * 获取单元格数据内容为日期类型的数据	 * 	 * @param cell	 *            Excel单元格	 * @return String 单元格数据内容	 */	@SuppressWarnings({ "unused", "deprecation" })	private String getDateCellValue(HSSFCell cell) {		String result = "";		try {			int cellType = cell.getCellType();			if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {				Date date = cell.getDateCellValue();				result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)						+ "-" + date.getDate();			} else if (cellType == HSSFCell.CELL_TYPE_STRING) {				String date = getStringCellValue(cell);				result = date.replaceAll("[年月]", "-").replace("日", "").trim();			} else if (cellType == HSSFCell.CELL_TYPE_BLANK) {				result = "";			}		} catch (Exception e) {			System.out.println("日期格式不正确!");			e.printStackTrace();		}		return result;	}	/**	 * 根据HSSFCell类型设置数据	 * 	 * @param cell	 * @return	 */	private String getCellFormatValue(HSSFCell cell) {		String cellvalue = "";		if (cell != null) {			// 判断当前Cell的Type			switch (cell.getCellType()) {			// 如果当前Cell的Type为NUMERIC			case HSSFCell.CELL_TYPE_NUMERIC:			case HSSFCell.CELL_TYPE_FORMULA: {				// 判断当前的cell是否为Date				if (HSSFDateUtil.isCellDateFormatted(cell)) {					// 如果是Date类型则,转化为Data格式					// 方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00					// cellvalue = cell.getDateCellValue().toLocaleString();					// 方法2:这样子的data格式是不带带时分秒的:2011-10-12					Date date = cell.getDateCellValue();					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");					cellvalue = sdf.format(date);				}				// 如果是纯数字				else {					// 取得当前Cell的数值					cellvalue = String.valueOf(cell.getNumericCellValue());				}				break;			}			// 如果当前Cell的Type为STRIN			case HSSFCell.CELL_TYPE_STRING:				// 取得当前的Cell字符串				cellvalue = cell.getRichStringCellValue().getString();				break;			// 默认的Cell值			default:				cellvalue = " ";			}		} else {			cellvalue = "";		}		return cellvalue;	}////	public static void main(String[] args) {//		try {//			// 对读取Excel表格标题测试//			ReadExcel excelReader = new ReadExcel();//			InputStream is = new FileInputStream("D:/a1.xls");//			String[] title = excelReader.readExcelTitle(is);//			System.out.println("获得Excel表格的标题:");//			for (String s : title) {//				System.out.print(s + "    ");//			}////			// 对读取Excel表格内容测试//			InputStream is2 = new FileInputStream("D:/a1.xls");//			Map map = excelReader.readExcelContent(is2);//			System.out.println("\n" + "获得Excel表格的内容:");//			for (int i = 1; i <= map.size(); i++) {//				System.out.println(map.get(i));//			}////		} catch (FileNotFoundException e) {//			System.out.println("未找到指定路径的文件!");//			e.printStackTrace();//		}//	}}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用POI取读Excel内容
POI 操作Excel
java操作Excel 2003或2007
POI操作Excel常用方法总结
java操作Excel的神奇之路
java excel合并单元格读取
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服