为什么80%的码农都做不了架构师?>>>   

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

运行如下:

结果如下:

转载于:https://my.oschina.net/zjcx/blog/679589

struts导入Excel进行解析相关推荐

  1. 导入excel 文件解析,一行数据,有一列分两行显示,解析时如何 合为一行?

    现象如图 实现代码: 1主方法测试 public static void main(String[] args) throws FileNotFoundException, IOException { ...

  2. ssh excel 导入 mysql_ssh poi解析excel并将数据存入数据库

    做完了一个报表导入数据库 功能 遇到几个问题:一 .Poi解析excel 的两种格式 xls xlsx. 二.form表单上传使用ajax 三.excel 单元格中有公式存在普通的读取方式读到的是公式 ...

  3. csv和excel php 解析_PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数

    CSV,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件. 一.CSV数据导入函数fgetcsv() fgetcsv() 函数从文件指针中读入一行并解析 CSV ...

  4. element excel导入数据,解析获取数据

    前端导入excel表格,解析为json格式数据 npm install xlsx -g 全局安装xlsx 新建一个组件,随意命名,键入以下代码,复制即可用 <template><sp ...

  5. EXCEL通过配置导入规则,实现任意格式EXCEL文件解析

    EXCEL文件导入到数据库,是一种常见的文件导入格式. 本文实现的EXCEL文件解析方法,优点是适合任意格式的EXCEL文件,缺点是每一张表单都需要配置对应的导入规则,在字段数量多时,配置导入规则就尴 ...

  6. 程序解析excel中的图片_产品日志丨支持导入Excel中的图片amp;批量修改后期实体字段...

    本次安捷秀又迎来了一个大版本更新,除了大家呼声很高的「实体模块导入 Excel 」外,还有「批量编辑实体」,「支持右击修改」以及针对海外用户的「全页面支持英文」等功能的新增与优化,一起来看看吧. 导入 ...

  7. web导入excel(利用POI解析)

    今天跟大家分享下,如何导入excel文件(此处以POI作为例子讲解) 1.导入相关jar包(文件上传和poi的jar) 2.html页面代码,form表单提交,也可以用ajax <form ac ...

  8. Springboot使用Apache POI实现导入导出和解析Excel

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站 点击跳转浏览. 1准备pom文件 <?xml version="1.0" e ...

  9. html导入excel文件,使用js-xlsx简单实现一个导入excel

    因为是老项目,所以我用的是jquery,css库是bootsharp. 需求是点击按钮实现上传excel转换成表格,代码如下 html 导入Excel 复制代码 js $(".btn-exp ...

最新文章

  1. win7如何添加开机启动程序(开机就自动运行打开)
  2. java猜数字游戏应用程序_猜数字游戏的Java小程序
  3. Vue3导入Vue-router报错:Uncaught SyntaxError: The requested module does not provide
  4. 微信小程序,引爆新热点!JEECG社区小程序实战培训,业内首发,实战干货!
  5. Android开发(22)--seekBar采用handler消息处理操作
  6. dlna和miracast可以共存吗_Airplay、Miracast、DLNA传输原理的底层搭建
  7. HbuiderX调用微信开发者工具设置
  8. 数学杂谈:高维空间向量夹角小记
  9. 微信在服务器上发不了图片大小,为什么微信发不了图片?这四招教你解决难题...
  10. XJNU CTF 2018
  11. 编程之美 2.1 求二进制中1的个数
  12. 服务器向客户端推送消息之——WebSocket详细使用
  13. 基于Seq2Seq的问答摘要与推理问题方案
  14. windows10未激活更换壁纸
  15. Coding沙龙之vbs脚本
  16. linux grep 和 find 命令
  17. 外地客户顺丰过来一个希捷 ST500DM002 FW:KC48说是开盘,其实不需要。
  18. 关于找工作,听听树莓老学长怎么说
  19. python爬虫 拼多多_拼多多爬虫之anti_content分析
  20. 栈溢出攻击c语言_软件漏洞分析入门(四)初级栈溢出C_修改程序流程

热门文章

  1. 华为云计算之FusionStorage
  2. Spark详解(十三):Spark Streaming 运行架构分析
  3. 在IIS上建立WAP网站的图文方法
  4. Vue(二) 计算属性
  5. 【机器学习】异常检测算法(I)
  6. tkinter学习-菜单与画布
  7. Android系统全貌 (转)
  8. 抽奖算法-指定概率的随机
  9. 关卡2-1 简单的模拟 1540 机器翻译
  10. Oracle高级查询之OVER (PARTITION BY ..)