利用poi来读取execl表格,返回一个对象(可能有点不完善,但是应该能满足平常的所用),用到了反射等等;

使用的jar包有:

commons-collections4-4.1.jar

poi-3.17.jar

poi-ooxml.3.17.jar

poi-ooxml-schemas.3.17.jar

xmllbeans-2.6.0.jar

/**
* 静态属性包
* @author Administrator
*
*/
public class Common {

public static final String OFFICE_EXCEL_2003_POSTFIX = "xls";
public static final String OFFICE_EXCEL_2010_POSTFIX = "xlsx";

public static final String EMPTY = "";
public static final String POINT = ".";
public static final String LIB_PATH = "lib";
/*public static final String STUDENT_INFO_XLS_PATH = LIB_PATH + "/student_info" + POINT + OFFICE_EXCEL_2003_POSTFIX;
public static final String STUDENT_INFO_XLSX_PATH = LIB_PATH + "/student_info" + POINT + OFFICE_EXCEL_2010_POSTFIX;*/
public static final String NOT_EXCEL_FILE = " : Not the Excel file!";
public static final String PROCESSING = "Processing...";

}

import java.lang.reflect.Field;
/**
* 工具包
* @author Administrator
*
*/
public class Util {

public static String getPostfix(String path) {
if (path == null || Common.EMPTY.equals(path.trim())) {
return Common.EMPTY;
}
if (path.contains(Common.POINT)) {
return path.substring(path.lastIndexOf(Common.POINT) + 1, path.length());
}
return Common.EMPTY;
}

// 获取属性的类型
public static String getFileType(Field field) {

// 如果类型是String
if (field.getGenericType().toString().equals("class java.lang.String")) { // 如果type是类类型,则前面包含"class
return "String";
}


// 如果类型是String
if (field.getGenericType().toString().equals("int")) { // 如果type是类类型,则前面包含"class
return "int";
}

// 如果类型是String
if (field.getGenericType().toString().equals("double")) { // 如果type是类类型,则前面包含"class
return "double";
}

// 如果类型是Integer
if (field.getGenericType().toString().equals("class java.lang.Integer")) {
return "Integer";
}

// 如果类型是Double
if (field.getGenericType().toString().equals("class java.lang.Double")) {
return "Double";
}

// 如果类型是Boolean 是封装类
if (field.getGenericType().toString().equals("class java.lang.Boolean")) {
return "Boolean";

}

// 如果类型是boolean 基本数据类型不一样 这里有点说名如果定义名是 isXXX的 那就全都是isXXX的
if (field.getGenericType().toString().equals("boolean")) {
return "boolean";
}
// 如果类型是Date
if (field.getGenericType().toString().equals("class java.util.Date")) {
return "Date";
}
// 如果类型是Short
if (field.getGenericType().toString().equals("class java.lang.Short")) {
return "Short";
}
return "null";

}

}

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
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;

/**
* 由于jxl停止更新,因此使用poi来进行excel的表格的读入
*
* @author Administrator
*
*/
public class ReadExcel {

public List<Object> readExcel(String path, Object o) throws IOException {
if (path == null || Common.EMPTY.equals(path)) {
return null;
} else {
String postfix = Util.getPostfix(path);
if (!Common.EMPTY.equals(postfix)) {
if (Common.OFFICE_EXCEL_2003_POSTFIX.equals(postfix)) {
return readXls(path, o);
} else if (Common.OFFICE_EXCEL_2010_POSTFIX.equals(postfix)) {
return readXlsx(path, o);
}
} else {
System.out.println(path + Common.NOT_EXCEL_FILE);
}
}
return null;
}

@SuppressWarnings("resource")
public List<Object> readXlsx(String path, Object object) throws IOException {

System.out.println(Common.PROCESSING + path);
InputStream is = new FileInputStream(path);
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
List<Object> list = new ArrayList<Object>();

// Read the Sheet
for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
if (xssfSheet == null) {
continue;
}
// Read the Row
for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
XSSFRow xssfRow = xssfSheet.getRow(rowNum);
if (xssfRow != null) {
// 根据反射获取对象的属性名
String[] str = getFiledName(object);
for (int i = 0; i < str.length; i++) {
try {
// 根据对象的属性名来给对象赋值
Field f = object.getClass().getDeclaredField(str[i]);
// 设置对象属性可见
f.setAccessible(true);
XSSFCell temp = xssfRow.getCell(i);
// 赋值
String type = Util.getFileType(f);

if(type.equals("String")) {
f.set(object, temp.getStringCellValue());
} else if(type.equals("Integer")) {
f.set(object, (int)(temp.getNumericCellValue()));
} else if(type.equals("int")) {
f.set(object, (int)(temp.getNumericCellValue()));
} else if(type.equals("double")) {
f.set(object,(temp.getNumericCellValue()));
} else if(type.equals("Double")) {
f.set(object, (temp.getNumericCellValue()));
} else if(type.equals("boolean")) {
f.set(object, (temp.getBooleanCellValue()));
} else if(type.equals("Boolean")){
f.set(object, (temp.getBooleanCellValue()));
} else if(type.equals("Date")) {
f.set(object, (temp.getDateCellValue()));
} else {
f.set(object, temp.getStringCellValue());
}

} catch (Exception e) {
e.printStackTrace();
}
}
try {
// 拷贝Object对象
Class<?> fromClass = object.getClass();
// 获取属性名
Field[] fromFields = fromClass.getDeclaredFields();
// 创建拷贝的对象
Object ints = null;
// 赋值拷贝的对象
ints = fromClass.newInstance();
for(Field fromField : fromFields) {
fromField.setAccessible(true);
fromField.set(ints, fromField.get(object));
}
list.add(ints);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
return list;
}

public List<Object> readXls(String path, Object object) throws IOException {
System.out.println(Common.PROCESSING + path);
InputStream is = new FileInputStream(path);
@SuppressWarnings("resource")
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
List<Object> list = new ArrayList<Object>();
// Read the Sheet
for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (hssfSheet == null) {
continue;
}
// Read the Row
for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
if (hssfRow != null) {
// 根据反射获取对象的属性名
String[] str = getFiledName(object);
for (int i = 0; i < str.length; i++) {
try {
// 根据对象的属性名来给对象赋值
Field f = object.getClass().getDeclaredField(str[i]);
// 设置对象属性可见
f.setAccessible(true);
HSSFCell temp = hssfRow.getCell(i);
// 赋值
// 赋值
String type = Util.getFileType(f);

if(type.equals("String")) {
f.set(object, temp.getStringCellValue());
} else if(type.equals("Integer")) {
f.set(object, (int)(temp.getNumericCellValue()));
} else if(type.equals("int")) {
f.set(object, (int)(temp.getNumericCellValue()));
} else if(type.equals("double")) {
f.set(object,(temp.getNumericCellValue()));
} else if(type.equals("Double")) {
f.set(object, (temp.getNumericCellValue()));
} else if(type.equals("boolean")) {
f.set(object, (temp.getBooleanCellValue()));
} else if(type.equals("Boolean")){
f.set(object, (temp.getBooleanCellValue()));
} else if(type.equals("Date")) {
f.set(object, (temp.getDateCellValue()));
} else {
f.set(object, temp.getStringCellValue());
}
} catch (Exception e) {
e.printStackTrace();
}
}
try {
// 拷贝Object对象
Class<?> fromClass = object.getClass();
// 获取属性名
Field[] fromFields = fromClass.getDeclaredFields();
// 创建拷贝的对象
Object ints = null;
// 赋值拷贝的对象
ints = fromClass.newInstance();
for(Field fromField : fromFields) {
fromField.setAccessible(true);
fromField.set(ints, fromField.get(object));
}
list.add(ints);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

}
}
}
return list;
}

@SuppressWarnings("unused")
private String[] getFiledName(Object o) {
Field[] fields = o.getClass().getDeclaredFields();
String[] fieldNames = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
fieldNames[i] = fields[i].getName();
}
return fieldNames;
}

}

下面利用student来示范一下

/**
* 实体类
* @author Administrator
*
*/
public class Student{

/**
* id
*/
private int id;
/**
* 姓名
*/
private String name;
/**
* 性别
*/
private String sex;
/**
* 年龄
*/
private int age;
/**
* 职位
*/
private String title;

public Student() {
super();
}

public int getId() {
return id;
}

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

public String getName() {
return name;
}

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

public String getSex() {
return sex;
}

public void setSex(String sex) {
this.sex = sex;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + ", title=" + title + "]";
}

}

import java.io.IOException;
import java.util.List;
/**
* 测试类
* @author Administrator
*
*/
public class TestDemo {

public static void main(String[] args) throws IOException {

String excel2010 = "H:\\MyTest\\Java\\test.xls";
// read the 2010 excel
Student student = new Student();
List<Object> list1 = new ReadExcel().readExcel(excel2010,student);
if (list1 != null) {
for (Object o : list1) {
Student s = (Student)o;
System.out.println(s);
}
}
}
}

大家有问题的可以私加我qq:2585700076

java利用poi来读取execl表格返回对象的更多相关文章

  1. java利用poi生成/读取excel表格

    1.引入jar包依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi< ...

  2. java利用POI实现读取Word并获取指定样式的文本

    import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.model.StyleDescription; import o ...

  3. JAVA 使用 POI进行读取Excel表格示例

    导包 编码 public class PoiTest { /** * 最终效果 * 表头一内容0 表头二内容1 表头三内容2 表头一内容1 表头二内容2 表头三内容3 表头一内容2 表头二内容3 表头 ...

  4. 利用poi来向execl中写入对象

    附上jar包下载链接: 附上百度网盘下载连接: 链接:https://pan.baidu.com/s/1t_jXUq3CuhZo9j_UI4URAQ 密码:r2qi package com.wz.po ...

  5. Java利用poi生成word(包含插入图片,动态表格,行合并)

    转(小改): Java利用poi生成word(包含插入图片,动态表格,行合并) 2018年12月20日 09:06:51 wjw_11093010 阅读数:70 Java利用poi生成word(包含插 ...

  6. Java读取Execl表格数据

    在前面提到用java代码新建一个Execl 表格并添加数据到表格中, 这次写了一个读取Execl表格数据并添加导数据库中的案列 给定对方一个Execl模板表格,如果导入的Execl表格和预订的表格不相 ...

  7. java 利用POI 读取Execel数据的真实行数

    java 利用poi 读execel文件的操作,读取总的数据行数一般是通过调用 sheet.getLastRowNum() ;可是这样有时候会出现一些问题,例如,当其中一行的数据的确都为空,可是其原本 ...

  8. 利用POI工具读取word文档并将数据存储到sqlserver数据库中

    今天实现了利用POI工具读取word文档,并将数据存储到sql数据库中,代码如下: package word; import java.io.File; import java.io.FileInpu ...

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

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 ...

随机推荐

  1. php中heredoc与nowdoc的使用方法

    一.heredoc结构及用法 Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义.其结构中的变量将被替换,但在 heredoc 结构中含有复杂的 ...

  2. 使用Java编译思想

    1.Java常见的注释有哪些,语法是怎样的? 1)单行注释用//表示,编译器看到//会忽略该行//后的所文本 2)多行注释/* */表示,编译器看到/*时会搜索接下来的*/,忽略掉/* */之间的文本 ...

  3. New UWP Community Toolkit - Markdown

    概述 前面 New UWP Community Toolkit 文章中,我们对 V2.2.0 版本的重要更新做了简单回顾,其中简单介绍了 MarkdownTextBlock 和 MarkdownDoc ...

  4. 【R语言系列】R语言初识及安装

    一.R是什么 R语言是由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman两个人共同发明. 其词法和语法分别源自Schema和S语言. R定义:一个能够自由幼小的用于统计计算和绘 ...

  5. IT & ME

    第一部分:结缘计算机 填报志愿的那天晚上,老爸老妈和我一起在房间里讨论专业选择的事情.因为我性格比较内敛,家人建议我去学医.而我又对学医一点也不感冒,再加上自己高中时期一直喜欢玩游戏,于是最后就填报了 ...

  6. 团队作业4——第一次项目冲刺(Alpha版本) Day 1

    小队@JMUZJB-集美震惊部 一.Daily Scrum Meeting照片 二.Burndown Chart 燃尽图 三.项目进展 1.界面 屏幕开发中,原型设计完毕. 2.服务器 服务器由学校提 ...

  7. 关于collectionView和tableView的两种cell的出列方法的区别

    相信好多人一定会对collectionView和tableView的两种cell出列方法有所疑问,下面以UICollection为例子进行举例说明 假设我们已经创建了一个collectionView, ...

  8. 第四十四条:为所有导出的API元素编写文档注释

    简而言之,要为API编写文档,文档注释是最好,最有效的途径.对于所有可导出的API元素来说,使用文档注释应该被看作是强制性的.要 采用一致的风格来遵循标准的约定.记住,在文档注释内部出现任何的HTML ...

  9. BEM 中文翻译

    BEM 原文请看 getBEM Introduction(介绍) Block 独立实体,独立的意义 Examples:header, container, menu, checkbox, input ...

  10. 13-TypeScript单例模式

    在JavaScript中,要实现设计模式比较复杂.而在TypeScript中因为使用面向对象的思想编程,要实现设计模式的方式与后端语言C#.Java等非常类似. 单例模式是一种常用的设计模式,通常用于 ...