struts导入Excel进行解析
2016-05-22 00:00
561 查看
struts导入Excel进行POI解析,源码地址:http://download.csdn.net/detail/bq1073100909/7887635
非常感谢http://blog.csdn.net/cherishme1988/article/details/8068339,我是在他的博客上学习的,成功实现。
新建一个web项目test,添加struts框架,我使用的工具是myeclipse。
添加如下jar包:poi-3.0-rc4-20070503.jar;poi-contrib-3.0-rc4-20070503.jar;poi-ooxml-schemas-3.7-beta3.jar;poi-scratchpad-3.0-rc4-20070503.jar
在源码中已经添加,在WebRoot下WEB-INF下的lib中。
Excel表中的数据格式如下图:
新建Person类:不过多解释直接代码上:
修改index.jsp,使之可以上传Excel文件:
struts.xml的配置文件,简单易懂,不多解释:
下面进入正题,action中的Excel导入,首先进行文件的上传,在WebRoot下面建文件夹upload,将上传的文件保存在这里。
ExcelUtil.importExcel(ufileFileName);就是对Excel进行解析,传入文件的名字,我单独写了一个类定义一个静态方法对Excel进行操作。
ExcelUtil.java代码:
这样就可以把Excel中的数据封装到Person类实例化的实体中并保存到list进行返回,如果进行ssh开发,建议把id去掉,因为保存数据是不需要id,这个是自动增长,在switch中从1开始就可以了,然后进行save(entity)存储到数据库。我做的这个例子主要是学习解析的原理。如果有其他的字段请自己添加。(其中对数据类型进行转换的时候要注意哦)
运行如下:
结果如下:
非常感谢http://blog.csdn.net/cherishme1988/article/details/8068339,我是在他的博客上学习的,成功实现。
新建一个web项目test,添加struts框架,我使用的工具是myeclipse。
添加如下jar包:poi-3.0-rc4-20070503.jar;poi-contrib-3.0-rc4-20070503.jar;poi-ooxml-schemas-3.7-beta3.jar;poi-scratchpad-3.0-rc4-20070503.jar
在源码中已经添加,在WebRoot下WEB-INF下的lib中。
Excel表中的数据格式如下图:
新建Person类:不过多解释直接代码上:
package bean; public class Person { private Integer id; private String name; private int age; 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString(){ return this.id+" "+this.name+" "+this.age; } }
修改index.jsp,使之可以上传Excel文件:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags" prefix="s" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>excel导入测试</title> </head> <body> <s:form theme="simple" action="uploadaction!upload" enctype="multipart/form-data" method="post"> 选择文件: <s:file name="ufile" accept="excel/*" id="ufilename" /> <br> <s:submit value="提交"></s:submit> </s:form> </body> </html>
struts.xml的配置文件,简单易懂,不多解释:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <package name="exceltest" namespace="/" extends="struts-default"> <action name="uploadaction" class="org.action.ExcelAction"> <result name="success">/success.jsp</result> </action> </package> </struts>
下面进入正题,action中的Excel导入,首先进行文件的上传,在WebRoot下面建文件夹upload,将上传的文件保存在这里。
package org.action; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.commons.io.FileUtils; 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.struts2.ServletActionContext; import org.myutil.ExcelUtil; import bean.Person; import com.opensymphony.xwork2.ActionSupport; public class ExcelAction extends ActionSupport { private String ufileFileName; private File ufile; public String upload(){ String directory = "/upload";//定义文件路径 String targetFileName = ufileFileName; String targetDirectory = ServletActionContext.getServletContext().getRealPath(directory); //生成上传对象 File target = new File(targetDirectory,targetFileName); //如果出存在就覆盖 if(target.exists()){ target.delete(); System.out.println("文件已经存在,将要覆盖"); } try { FileUtils.copyFile(ufile, target); } catch (IOException e) { e.printStackTrace(); } List<Person> list = ExcelUtil.importExcel(ufileFileName); int size = 0; System.out.println(size = list.size()); for(int i=0;i<size;i++){ System.out.println(list.get(i).toString()); } return "success"; } public String getUfileFileName() { return ufileFileName; } public void setUfileFileName(String ufileFileName) { this.ufileFileName = ufileFileName; } public File getUfile() { return ufile; } public void setUfile(File ufile) { this.ufile = ufile; } }
ExcelUtil.importExcel(ufileFileName);就是对Excel进行解析,传入文件的名字,我单独写了一个类定义一个静态方法对Excel进行操作。
ExcelUtil.java代码:
package org.myutil; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; 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.struts2.ServletActionContext; import bean.Person; public class ExcelUtil { public static List<Person> importExcel(String ufileFileName){ String directory = "/upload"; String targetDirectory = ServletActionContext.getServletContext().getRealPath(directory); File target = new File(targetDirectory,ufileFileName); //读取上传的文件 List<Person> list = new ArrayList<Person>(); //读取上传的文件 try { FileInputStream fis = new FileInputStream(target); //初始化一个工作簿 HSSFWorkbook wb = new HSSFWorkbook(fis); //第一张表单 HSSFSheet sheet = wb.getSheetAt(0); int rowNum = sheet.getLastRowNum()+1; //row行初始行数位0; System.out.println("sheet表行数为:"+rowNum); //打印总行数 //上传的Excel表带有表头,所以从第二行开始,索引为1 ; for(int i=1;i<rowNum;i++){ Person person = new Person(); //new一个project实例 HSSFRow row = sheet.getRow(i); int cellNum = row.getLastCellNum(); for(short j=0;j<cellNum;j++){ // HSSFCell cell = row.getCell(j); String cellValue = null ; //类型转换; if(cell.getCellType() == HSSFCell.CELL_TYPE_STRING){ cellValue = cell.getStringCellValue(); }else if(HSSFCell.CELL_TYPE_NUMERIC ==cell.getCellType() ) { //对数字的处理 if (HSSFDateUtil.isCellDateFormatted(cell)) { Date d = cell.getDateCellValue(); //对日期处理 DateFormat formater = new SimpleDateFormat("yyyy-MM-dd hh:mm"); cellValue = formater.format(d); } else {// 其余按照数字处理 cellValue = String.valueOf((int)cell.getNumericCellValue()) ; } } switch(j){ case 0:person.setId(Integer.parseInt(cellValue.trim())); break; case 1:person.setName(cellValue.trim()); break; case 2:person.setAge(Integer.parseInt(cellValue.trim())); break; } } list.add(person); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return list; } }
这样就可以把Excel中的数据封装到Person类实例化的实体中并保存到list进行返回,如果进行ssh开发,建议把id去掉,因为保存数据是不需要id,这个是自动增长,在switch中从1开始就可以了,然后进行save(entity)存储到数据库。我做的这个例子主要是学习解析的原理。如果有其他的字段请自己添加。(其中对数据类型进行转换的时候要注意哦)
运行如下:
结果如下:
相关文章推荐
- java简单的MySQL数据库连接增删改查
- java对于半角和全角的转换
- hibernate正向工程创建数据库createDB.java
- java读取InputStream输入流后输出String字符串
- javaweb简单实现国际化信息输出(参考)
- java事务
- Java基本类型与包装类的区别
- 对Java多态的理解
- Java Thread多线程
- spring容器初始化时报java.lang.IllegalArgumentException
- 解决eclipse每次Run as Android 程序,会重新启动一个AVD模拟器的问题
- 抽象练习、封装及javadoc使用等相关演示
- IDEA导入Maven项目(Spring+Mybatis)后登录报错:找不到对应的Dao方法
- FTP方式的文件上传和下载的Java代码
- Java web项目结构目录
- JAVA虚拟机学习1---OpenJDK的编译
- java中模拟浏览器访问网页(三)
- 如何编写和应用Java的自定义异常类
- Java中Properties类的操作
- JAVA中堆和栈的区别