poi 导入excel 数据转对象

package org.rui.xls;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.reflect.Field;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
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.rui.bean.User;

public class ExportXls
{
	public static void main(String[] args) throws FileNotFoundException,
			IOException
	{

		List<User> list = new LinkedList<User>();

		String file = "C:/Users/lenovo/Downloads/营销空间数据导入模板.xls";
		// 创建对Excel工作簿文件的引用
		HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(file));
		// 本例是按名引用(让我们假定那张表有着缺省名"Sheet1")
		// HSSFSheet sheet = workbook.getSheet("Sheet1");
		HSSFSheet sheet = workbook.getSheetAt(0);
		// 读取一行
		// HSSFRow row = sheet.getRow(0);
		// it读取行
		Iterator<HSSFRow> itRow = sheet.rowIterator();

		int j = 0;
		while (itRow.hasNext()) {
			HSSFRow row = itRow.next();
			// 读行格
			Iterator<HSSFCell> it = row.cellIterator();
			int cellIndex = 0;
			User user = new User();
			while (it.hasNext()) {
				HSSFCell ce = it.next();
				// 检查是否合法
				if (j == 0) {
					String titleName = ce.getStringCellValue();
					Class clz = user.getClass();
					if (!isOk(clz, titleName)) {
						System.out.println("表格格式不符合导入的数据格式!");
						return;
					}

				} else {

					switch (cellIndex)
					{
					case 0:// 第一格
						Double d = ce.getNumericCellValue();
						Integer id = Integer.parseInt(new DecimalFormat("0")
								.format(d));
						user.setId(id);
						break;
					case 1:
						user.setName(ce.getStringCellValue());
						break;
					case 2:
						// DecimalFormat df = new DecimalFormat("#.00");
						// String Stringd = df.format(ce.getNumericCellValue());
						user.setPrice(ce.getNumericCellValue());
						break;
					case 3:
						user.setDate(ce.getDateCellValue());
						break;
					default:
						break;
					}

				}
				cellIndex++;

			}
			if (j != 0) {
				list.add(user);
			}

			j++;
		}

		System.out.println("=============================================");
		for (User u : list) {
			System.out.println(u.getId() + " \t " + "name:" + u.getName()
					+ " \t " + u.getPrice() + " \t " + u.getDate());
		}
	}

	/**
	 * 检查表格是否和对象一致
	 *
	 * @param clz
	 * @param titleName
	 * @return
	 */
	public static boolean isOk(Class clz, String titleName)
	{
		boolean isExist = false;
		Field[] fa = clz.getDeclaredFields();
		for (int i = 0; i < fa.length; i++) {
			// System.out.println(fa[i].getName());
			if (titleName.equals(fa[i].getName())) {
				isExist = true;
				break;
			}
		}

		return isExist;
	}
}
/**
 * output:
 * =============================================
1 	 name:粘地 	 1.0 	 Fri Oct 10 00:00:00 CST 2014
2 	 name:小夺 	 555.0 	 Fri Oct 10 00:00:00 CST 2014
3 	 name:无可奈何花落去  	 66.0 	 Fri Oct 10 00:00:00 CST 2014
4 	 name:夺 	 88.88 	 Fri Oct 10 00:00:00 CST 2014
5 	 name:魂牵梦萦  	 55.0 	 Fri Oct 10 00:00:00 CST 2014
 * ***/

//之前例子,这样看比较好理解

					// 读取数据
//					if (HSSFCell.CELL_TYPE_NUMERIC == ce.getCellType()) {
//
//						/** 在excel里,日期也是数字,在此要进行判断 */
//						if (HSSFDateUtil.isCellDateFormatted(ce)) {
//							DateFormat format = new SimpleDateFormat(
//									"yyyy/MM/dd HH:mm:ss");
//							System.out.println("date:"
//									+ format.format(ce.getDateCellValue()));
//						} else {
//							System.out.println("numeric:"
//									+ ce.getNumericCellValue() + "");
//						}
//					} else if (HSSFCell.CELL_TYPE_STRING == ce.getCellType()) {
//						System.out.println("x:" + ce.getStringCellValue());
//		
package org.rui.bean;

import java.lang.reflect.Field;
import java.util.Date;

public class User
{

	private Integer id;
	private String name;
	private Double price;
	private Date date;

	public Integer getId()
	{
		return id;
	}

	public void setId(Integer id)
	{
		this.id = id;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public Double getPrice()
	{
		return price;
	}

	public void setPrice(Double price)
	{
		this.price = price;
	}

	public Date getDate()
	{
		return date;
	}

	public void setDate(Date date)
	{
		this.date = date;
	}

	public static void main(String[] args)
	{
		Class clz = User.class;

		Field[] fa = clz.getDeclaredFields();

		for (int i = 0; i < fa.length; i++) {
			System.out.println(fa[i].getName());
		}

	}

}

时间: 2024-10-27 11:32:24

poi 导入excel 数据转对象的相关文章

POI 导入excel数据自己主动封装成model对象--代码分析

上完代码后,对代码进行基本的分析: 1.主要使用反射api将数数据注入javabean对象 2.代码中的日志信息级别为debug级别 3.获取ExcelImport对象后须要调用init()方法初始化数据信息 4.推断单元格类型.主要难点为日期类型的推断,假设对poi的API不是非常熟悉可能会有点难下面手(我也是百度的.) String value = null; switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_BOOLEAN: val

spring+struts2+mybatis中poi导入excel数据

1.html <td class="queryTdRight" style="width:22%;">  交易年度: <input id="dealYear" name="dealYear" style="width: 140px"/> </td> <td class="queryTdRight" style="width:40%;&q

Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)

ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件. 2.excel定义成模板,里面只填写了所需要的数据,有可能数据有问题. 3.在导入的时候就需要对每个excel单元格的数据进行验证. 4.验证完之后,若所有数据正确,那么批量保存.若有一点点错误,就不执行保存操作,并提示错误原因. 思路: 1.完美使用了Map的功能,先将xml中的数据存入map

基于POI导出Excel数据

基于POI导出Excel数据 在项目中会有许多报表业务,需要导出数据.在这里我们采用基于POI的方式解析.POI有俩种解析方式HSSF(xls格式)和XSSF(xlsx). 以BOS物流的运单管理界面为例: 前端代码 导出运单信息,生成报表: 1.添加导出按钮 2.添加导出事件 后台代码实现 POI生成Excel步骤写Excel过程一样,新建Excel文档----新建Sheet---新建Row---新建Cell单元格---写单元格数据. Maven导入jar包信息请参加一键上传里面的配置 Act

poi导入excel

Spring+SpringMVC+Maven+MyBatis+Mysql此环境下的POI导入 此文档讲解Excel导入的功能 1.1 POI导入excel 浏览器效果展示: 前端代码 前端Html代码: <!-- 导入 --> <div class="layui-inline"> <div class="layui-input-block" style="margin-left: 10px;"> <but

结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程

1.bootstrap-fileinpu的简单介绍 在前面的随笔,我介绍了Bootstrap-table表格插件的具体项目应用过程,本篇随笔介绍另外一个Bootstrap FieInput插件的使用,整合两者可以实现我们常规的Web数据导入操作,导入数据操作过程包括有上传文件,预览数据,选择并提交记录等一系列操作. 关于这个插件,我在早期随笔<Bootstrap文件上传插件File Input的使用>也做了一次介绍,这是一个增强的 HTML5 文件输入控件,是一个 Bootstrap 3.x

SQL Server服务器上需要导入Excel数据的必要条件

SQL Server服务器上需要导入Excel数据,必须安装2007 Office system 驱动程序:数据连接组件,或者Access2010的数据库引擎可再发行程序包,这样就不必在服务器上装Excel了.

asp.net采用OLEDB方式导入Excel数据时提示:未在本地计算机上注册&quot;Microsoft.Jet.OLEDB.4.0&quot; 提供程序&quot;

asp.net采用OLEDB方式导入Excel数据时提示:未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0" 提供程序" 笔者在项目中做做了一个从Excel表格中导入数据的模块.大体上asp.net项目中导入Excel大体分成三类: 1)采用c#内置方案System.Data.OleDb(限制较小, 通用) 2)采用Excel的COM组件(会有版本问题) 3)采用伪Excel文件.即使用文本流的方式根据需求自己定义数据格式.同时在服务端进行反格式化 笔者采

C#导入Excel数据

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.OleDb; using test.App_Code; using System.Text.RegularExpressions; using Sy