POI读取Excel数据

所需jar包:

xmlbeans-2.3.0.jar

poi-ooxml-schemas-3.8-20120326.jar

poi-ooxml-3.8-20120326.jar

poi-3.8-20120326.jar

dom4j-1.6.1.jar

// 本例为本地路径的文件,如果是从服务器或者插件上转之后的file对象,需要通过一定手段进行转换,

提供一种参考:

File tempFile = File.createTempFile("random", suffix);
FileUtils.writeByteArrayToFile(tempFile, file.getBytes());
/**
 *
 */
package poi;

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

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.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import domain.Param;

/**
 * @author liuyunlong
 */
public class ExcelPoi {

	/**
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {

		ExcelPoi excelPoi = new ExcelPoi();

		String fileDir = "D:\\excel\\params2.xls";
		int beginIndex = fileDir.lastIndexOf(".");
		int endIndex = fileDir.length();
		String suffix = fileDir.substring(beginIndex, endIndex);
		List<Param> paramList = new ArrayList<Param>();
		InputStream inputStream = new FileInputStream(fileDir);
		if (".xls".equals(suffix)) {
			paramList = excelPoi.readXls(inputStream);
		} else {
			paramList = excelPoi.readXlsx(inputStream);
		}
		for (int i = 0; i < paramList.size(); i++) {
			System.out.println("file suffix= "+ suffix +" and params=====" + paramList.get(i).toString());
		}
	}

	/**
	 * 后缀为.xlsx
	 *
	 * @param fileDir
	 * @throws IOException
	 */
	private List<Param> readXlsx(InputStream inputStream) throws IOException {
		XSSFWorkbook xssfWorkbook = new XSSFWorkbook(inputStream);
		List<Param> paramList = new ArrayList<Param>();

		// 循环工作表Sheet
		int sheetNumbers = xssfWorkbook.getNumberOfSheets();
		for (int numSheet = 0; numSheet < sheetNumbers; numSheet++) {
			XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
			if (xssfSheet == null) {
				continue;
			}

			// 循环当前Sheet的行Row
			int rowNumbers = xssfSheet.getLastRowNum();
			for (int rowNum = 0; rowNum <= rowNumbers; rowNum++) {
				XSSFRow xssfRow = xssfSheet.getRow(rowNum);
				if (xssfRow == null) {
					continue;
				}

				// 循环当前Row的列Cell
				Param param = new Param();
				int cellNumbers = xssfRow.getLastCellNum();
				if (2 == cellNumbers) {// 2列分别获取两列中的值作为key和value
					for (int cellNum = 0; cellNum <= cellNumbers; cellNum++) {
						XSSFCell xssfCell = xssfRow.getCell(cellNum);
						if (xssfCell == null) {
							continue;
						}
						if (cellNum == 0) {
							param.setParamKey(xssfCell.toString());
						} else if (cellNum == 1) {
							param.setParamValue(xssfCell.toString());
						}
					}
				} else if (1 == cellNumbers) {// 1列,必须用":"或":"分隔开,否则不解析
					XSSFCell xssfCell = xssfRow.getCell(0);
					String xssStr = xssfCell.toString();
					if (null != xssfCell && (xssStr.indexOf(":") > -1 || xssStr.indexOf(":") > -1)) {
						String[] paramFix = null;
						if (xssStr.contains(":")) {
							paramFix = xssStr.split(":");
						} else if (xssStr.contains(":")) {
							paramFix = xssStr.split(":");
						}
						if (null != paramFix && paramFix.length > 0) {
							param.setParamKey(paramFix[0]);
							param.setParamValue(paramFix[1]);
						}
					} else {
						continue;
					}
				} else {// 非1或2列为非法文档,不解析
					continue;
				}
				paramList.add(param);
			}
		}
		return paramList;
	}

	/**
	 * 后缀为.xls
	 *
	 * @param fileDir
	 * @throws IOException
	 */
	private List<Param> readXls(InputStream inputStream) throws IOException {
		HSSFWorkbook hssfWorkbook = new HSSFWorkbook(inputStream);
		List<Param> paramList = new ArrayList<Param>();

		// 循环工作表Sheet
		int sheetNumbers = hssfWorkbook.getNumberOfSheets();
		for (int numSheet = 0; numSheet < sheetNumbers; numSheet++) {
			HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
			if (hssfSheet == null) {
				continue;
			}

			// 循环当前Sheet的行Row
			int rowNumbers = hssfSheet.getLastRowNum();
			for (int rowNum = 0; rowNum <= rowNumbers; rowNum++) {
				HSSFRow hssfRow = hssfSheet.getRow(rowNum);
				if (hssfRow == null) {
					continue;
				}

				// 循环当前Row的列Cell
				Param param = new Param();
				int cellNumbers = hssfRow.getLastCellNum();
				if (2 == cellNumbers) {// 2列分别获取两列中的值作为key和value
					for (int cellNum = 0; cellNum <= cellNumbers; cellNum++) {
						HSSFCell hssfCell = hssfRow.getCell(cellNum);
						if (hssfCell == null) {
							continue;
						}
						if (cellNum == 0) {
							param.setParamKey(hssfCell.toString());
						} else if (cellNum == 1) {
							param.setParamValue(hssfCell.toString());
						}
					}
				} else if (1 == cellNumbers) {// 1列,必须用":"或":"分隔开,否则不解析
					HSSFCell hssfCell = hssfRow.getCell(0);
					String hssStr = hssfCell.toString();
					if (null != hssfCell && (hssStr.indexOf(":") > -1 || hssStr.indexOf(":") > -1)) {
						String[] paramFix = null;
						if (hssStr.contains(":")) {
							paramFix = hssStr.split(":");
						} else if (hssStr.contains(":")) {
							paramFix = hssStr.split(":");
						}
						if (null != paramFix && paramFix.length > 0) {
							param.setParamKey(paramFix[0]);
							param.setParamValue(paramFix[1]);
						}
					} else {
						continue;
					}
				} else {// 非1或2列为非法文档,不解析
					continue;
				}
				paramList.add(param);
			}
		}
		return paramList;
	}
}

param类

/**
 *
 */
package domain;

/**
 * @author liuyunlong
 *
 */
public class Param {

	public Param() {
		super();
	}

	private String paramKey;

	private String paramValue;

	public String getParamKey() {
		return paramKey;
	}

	public void setParamKey(String paramKey) {
		this.paramKey = paramKey;
	}

	public String getParamValue() {
		return paramValue;
	}

	public void setParamValue(String paramValue) {
		this.paramValue = paramValue;
	}

	@Override
	public String toString() {
		return "Param [paramKey=" + paramKey + ", paramValue=" + paramValue + "]";
	}

}
时间: 2024-10-28 05:25:18

POI读取Excel数据的相关文章

POI读取Excel数据保存到数据库,并反馈给用户处理信息

今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户.于是想到了POI读取文件提取数据,也可以利用Jxl读取Excel提取数据. 最终效果: 对于下面的Excel,总共20条数据.18条在数据库已经存在,最后两条是在同一个excel文件中重复在数据库不存在. 反馈结果:(也就是最后两个X6511只保存了一条) 思路: 1.先将Excel文件上传到本地,保存到本地磁盘 2.读取

java的poi技术读取Excel数据

这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: java的poi技术读取Excel数据到MySQL 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术 :java的jxl技术导入Excel  下面是本文的项目结构: 项目中所需要的jar文件: 所用的Excel数据(2003-2007,2010都是一

java的poi技术读取Excel数据到MySQL

这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 :java的jxl技术导入Excel  项目结构: Excel中的测试数据: 数据库结构: 对应的SQL: 1 CREATE TABLE `student_info` ( 2 `id` int(11) NOT NULL AUTO_INCREMENT, 3 `no` varchar(20) DEFAU

POI读取Excel内容格式化

在用POI读取Excel内容时,经常会遇到数据格式化的问题. 比如:数字12365会变为12365.0;字符串数字123也会变为123.0,甚至会被变为科学计数法.另外日期格式化也是一个头疼的问题.其实最希望的方式是Excel是什么,那POI取出来就是什么,不要搞任何转换. 网上搜罗各种格式化方式后,找到最满意的一种: import org.apache.poi.hssf.usermodel.HSSFDataFormatter; import org.apache.poi.hssf.usermo

使用Apache POI 读取Excel文件

生活中用到用到Excel文件的情况很多,什么商品进货单,产品维修单,餐厅的营业额等等.作为程序员,我们该如何读取Excel文件,获取我们想要的资源呢.本篇将讲解如何使用Apache POI读取Excel文件. 准备工作: 1)Apache POI 开发jar包 2)Excel资源文件,包括Excel2003,Excel2007这两种版本分别对应xls.xlsx文件. 本篇已经为您做好准备工作,请点击此处,下载资源文件,你也可以浏览Apace POI官网了解更多详细信息. 简要流程: 获取Work

【爱上Java8】使用POI读取Excel表

最近有这么一个小需求,需要从Excel里读取2张表.如果是表1和表2,那么比较表1,表2,列出在表1中存在,但是表2中不存在的项,以及在表2中存在,在表1中不存在的项.使用POI可以很轻松的完成这个功能.首先,为表建模,表项为:部门代码 部门名称 职位名称 职员代码 职员姓名每一行为一个职员的信息.使用职员代码来标示每一行. 12345678910111213141516171819202122232425262728 package zhoukai; import org.apache.poi

Java Poi 读取excel 对所有类型进行处理

1.最近做了一个批量导入功能 , 发现poi读取excel的日期类型会出现问题,源于日期类型分为以下几种: ①.yyyy/MM/dd ②.HH:mm:ss ③.yyyy/MM/dd HH:mm:ss 2.解决思路: 日期,数字的类型都是数值的, 所有需要对每一个进行区分,根据cell.getCellStyle().getDataFormat() 方法  可以得到excel 格子中的short类型的值 ,从断点中得知 yyyy/MM/dd 格式的值是 14 HH:mm:ss  格式的值是 21 y

asp.net读取Excel数据

先通过控件FileUpload获取excel文件路径 protected void btnReadExcelFromFileUpload_Click(object sender, EventArgs e) { if (fupExcel.PostedFile.ContentLength > 0) { //获取全路径 string fullFileName = fupExcel.PostedFile.FileName.ToString(); //获取文件名 string fileName = fup

POI 读取 Excel 转 HTML 支持 03xls 和 07xlsx 版本 包含样式

工作需求: 提供EXCEL模板上传后预览:EXCEL解析成终端风格HTML. 处理方案: POI解析EXCEL,预览时尽量获取原有表格的样式:终端使用EXCEL解析的无样式HTML,然后通过jQuery添加CSS样式 遇到问题: CSDN上大牛处理03版xls格式的有成功例子:但是07版xlsx格式的样式处理未找到理想中的例子 下文是参考大牛的例子整理后的程序 供参考! EXCEL表格07xlsx格式 通过POI解析带样式的效果 项目JAR文件注意版本 JAVA 1 package com.hb