文档章节

struts导入Excel进行解析

指尖残雪
 指尖残雪
发布于 2016/05/22 23:56
字数 999
阅读 4
收藏 0
点赞 2
评论 0

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类:不过多解释直接代码上:

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)存储到数据库。我做的这个例子主要是学习解析的原理。如果有其他的字段请自己添加。(其中对数据类型进行转换的时候要注意哦)

运行如下:


结果如下:


本文转载自:http://blog.csdn.net/bq1073100909/article/details/39176985

共有 人打赏支持
指尖残雪
粉丝 7
博文 73
码字总数 0
作品 0
上海
后端工程师
ST2-045 For POC

转载请注明: 转载自Legend‘s BLog 本文链接地址: ST2-045 For POC 利用方法: 漏洞说明: Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号CVE-2017-5638,在使用基于J...

apachecn_飞龙 ⋅ 2017/03/18 ⋅ 0

MyEclipse 2017 整合SSH三大框架 到登录功能的实现(附源码)

本来以为学完Java EE之后用个三大框架没什么难度,结果昨天搭环境就搞了一晚上,还是靠室友找了半天才找出错误在哪,为了避免重复踩坑,而且目前网上用myeclipse2017做环境的教程还是蛮少的,...

xp731574722 ⋅ 03/02 ⋅ 0

企业未修复Apache Struts 2漏洞致Web服务器被批量入侵

  0×1 概述   腾讯御见威胁情报中心监控发现,近期有大批企业网站的Web服务器遭到入侵并被植入挖矿木马。   安全人员分析发现被攻击网站服务器多存在Apache Struts 2 Jakarta Multipa...

FreeBuf ⋅ 04/29 ⋅ 0

[Struts]Token 使用及原理

Struts Token 使用 1,先在一个Action中,调用saveToken(HttpServletRequest request)方法。然后转向带有表单的JSP页面。 2,在JSP页面提交表单给一个Action,再这个Action中进行是否为重复提...

thinkyoung ⋅ 2014/12/17 ⋅ 0

Java 模板引擎 Beetl 2.8.0 发布,增加根对象支持

Java 模板引擎 Beetl 2.8.0 发布了,改进内容包括: #348 beetl 默认配置DefaultTemplateEngine #347 增加根对象支持 #346 允许设置全局 ClassLoader #345 支持struts2.5, 由于struts升级不...

闲大赋 ⋅ 04/23 ⋅ 0

开源产业不断发展,软件安全问题亟需得到关注

近日 Sonatype 发布了“2018年开源安全与风险分析”报告,该报告显示开源应用有大幅增长,在检测的应用中有96%包含开源组件,同时包含漏洞的软件数量也在不断增加。随着开源产业不断发展,目...

雨田桑 ⋅ 05/18 ⋅ 0

SSH (Struts2+Spring3.0+Hibernate3)框架(一) 理论

  典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层...

thinkyoung ⋅ 2014/12/17 ⋅ 0

spring+springMvc+struts的SSH框架整合

小疯之前工作用的框架是o3w,SSH框架只是学习的时候用过,然后今天就回头来重新回顾SSH,就在网上找了一篇比较全而且比较简单的文章来帮助自己快速的理解SSH。 1.建立一个web项目 2.导入SSH...

野小疯 ⋅ 05/27 ⋅ 0

书单丨5本Java后端技术书指引你快速进阶

一名Java开发工程师 不仅要对Java语言及特性有深层次的理解 而且需要掌握与Java相关的 框架、生态及后端开发知识 本文涉及多种后端开发需要掌握的技能 对于帮助提高开发能力非常有帮助 NO.1...

Java高级架构 ⋅ 05/30 ⋅ 0

闲谈“如何优化SSH框架的项目”

使用struts框架的好处之一就是所有action类继承一个基类,将访问控制在基类中处理.2.所有的action类都继承自baseaction,一个资源对应一个action类. 1.实现一个继承自struts的action的baseact...

thinkyoung ⋅ 2014/12/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

【2018.0620学习笔记】【linux高级知识 13.4-13.6】

13.4 mysql用户管理 13.5 常用sql语句 13.6 mysql数据库备份恢复

lgsxp ⋅ 44分钟前 ⋅ 0

Java强弱引用示例

package jdk;import java.lang.ref.PhantomReference;import java.lang.ref.ReferenceQueue;import java.lang.ref.SoftReference;import java.lang.ref.WeakReference;public ......

月下狼 ⋅ 49分钟前 ⋅ 0

How I built a wind map with WebGL

Check out my WebGL-based wind power simulation demo! Let’s dive into how it works under the hood. I have an unflattering confession to make: for the last few years working at M......

voole ⋅ 52分钟前 ⋅ 0

Spring Cloud Finchley 正式发布,包含 4 个重大更新!

在 Spring 的官方博客上已经看到 Spring Cloud Finchley 在 06 月 19 日这一天正式发布了,我们在 Maven 中央仓库也看到了最新版的更新。 Finchley 正式版的发布貌似经历了相当长的时间,果然...

Java技术栈 ⋅ 52分钟前 ⋅ 0

QT5交叉编译

configure配置 ./configure -release -opensource -prefix <path> -no-largefile -no-pkg-config -no-qml-debug -xplatform <target> -qt-libpng -qt-zlib -qt-libjpeg -qt-freetype -qt-sq......

水海云 ⋅ 56分钟前 ⋅ 0

Linux环境下安装sshd服务

SSH 协议:安全外壳协议。为 Secure Shell 的缩写。SSH 为建立在应用层和传输层基础上的安全协议。 sshd服务使用SSH协议可以用来进行远程控制, 或在计算机之间传送文件 安装 yum -y install...

晨猫 ⋅ 今天 ⋅ 0

ubuntu国内镜像站点及更新源

1: http://mirrors.163.com/ 2: https://www.oschina.net/p/ubuntu 3: Ubuntu 几个国内更新源 如何更改源 可以在软件更新中选择源 使用如下命令更改(修改前先备份): sudo vim /etc/apt/sour...

whoisliang ⋅ 今天 ⋅ 0

java实现沙箱测试环境支付宝支付(demo)和整合微信支付和支付宝支付到SSM环境全过程(附源码)

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、支付宝测试环境代码测试 1.下载电脑网站的官方demo: 下载地址:https://d...

公众号_好好学java ⋅ 今天 ⋅ 1

如何 3D 打印一个密码锁

简评:这篇文章介绍怎么用 3D 打印机做一个密码锁,巧妙地利用机械结构的变化实现锁的功能,相当有趣! 3D 打印机非常适合打印静态物体。如果你够聪明,还可以打印出功能物件。如果你特别特别...

极光推送 ⋅ 今天 ⋅ 0

Day 17 vim简介与一般模式介绍

vim简介 vi和Vim的最大区别就是编辑一个文件时vi不会显示颜色,而Vim会显示颜色。显示颜色更便于用户编辑,凄然功能没有太大的区别 使用 yum install -y vim-enhanced 安装 vim的三种常用模式...

杉下 ⋅ 今天 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部