博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java的poi技术下载Excel模板上传Excel读取Excel中内容(SSM框架)
阅读量:5248 次
发布时间:2019-06-14

本文共 10391 字,大约阅读时间需要 34 分钟。

使用到的jar包

JSP: client.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%    String importMsg = "";    if (request.getSession().getAttribute("msg") != null) {        importMsg = request.getSession().getAttribute("msg").toString();    }    request.getSession().setAttribute("msg", "");%>批量导入客户
下载Exel模板
批量导入客户
<%=importMsg%>

controller: ClientController.java

package com.shiliu.game.controller;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import com.shiliu.game.domain.bean.Customer;import com.shiliu.game.utils.ReadExcel;import com.shiliu.game.utils.WDWUtil;/** * @author wkr * @Date 2016-11-18 */@Controller@RequestMapping("/client")public class ClientController {    private static Log log = LogFactory.getLog(ClientController.class);    /**     * 访问controller进入操作页面     * @return     */    @RequestMapping(value="/init")    public String init(){        System.out.println("控制台输出:初始化页面信息");        return "client/client";    }    /**     * 上传Excel,读取Excel中内容     * @param file     * @param request     * @param response     * @return     * @throws IOException     */    @RequestMapping(value = "/batchimport",method = RequestMethod.POST)    public String batchimport(@RequestParam(value="filename") MultipartFile file,            HttpServletRequest request,HttpServletResponse response) throws IOException{        log.info("ClientController ..batchimport() start");        String Msg =null;        boolean b = false;                //判断文件是否为空        if(file==null){            Msg ="文件是为空!";            request.getSession().setAttribute("msg",Msg);            return "client/client";        }                //获取文件名        String name=file.getOriginalFilename();                //进一步判断文件是否为空(即判断其大小是否为0或其名称是否为null)验证文件名是否合格        long size=file.getSize();        if(name==null || ("").equals(name) && size==0 && !WDWUtil.validateExcel(name)){            Msg ="文件格式不正确!请使用.xls或.xlsx后缀文档。";            request.getSession().setAttribute("msg",Msg);            return "client/client";        }                //创建处理EXCEL        ReadExcel readExcel=new ReadExcel();        //解析excel,获取客户信息集合。        List
customerList = readExcel.getExcelInfo(file); if(customerList != null && !customerList.toString().equals("[]") && customerList.size()>=1){ b = true; } if(b){ //迭代添加客户信息(注:实际上这里也可以直接将customerList集合作为参数,在Mybatis的相应映射文件中使用foreach标签进行批量添加。) for(Customer customer:customerList){ //这里可以做添加数据库的功能 System.out.println("第一个值:"+customer.getCustomer1()+"\t第二个值:"+customer.getCustomer2()+"\t第三个值:"+customer.getCustomer3()); } Msg ="批量导入EXCEL成功!"; request.getSession().setAttribute("msg",Msg); }else{ Msg ="批量导入EXCEL失败!"; request.getSession().setAttribute("msg",Msg); } return "client/client"; } /** * 下载Excel模板 * @param fileName * @param request * @param response * @return */ @RequestMapping("/download") public String download(String fileName, HttpServletRequest request, HttpServletResponse response) { System.out.println("控制台输出:走入下载"); response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition", "attachment;fileName="+ fileName); try { /*String path = Thread.currentThread().getContextClassLoader() .getResource("").getPath() + "download";//这个download目录为啥建立在classes下的 */ String path="D:\\upload"; InputStream inputStream = new FileInputStream(new File(path+ File.separator + fileName)); OutputStream os = response.getOutputStream(); byte[] b = new byte[2048]; int length; while ((length = inputStream.read(b)) > 0) { os.write(b, 0, length); } // 这里主要关闭。 os.close(); inputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 返回值要注意,要不然就出现下面这句错误! //java+getOutputStream() has already been called for this response return null; } }

utils: WDWUtil.java

package com.shiliu.game.utils;/** * @author wkr * @Date 2016-11-18 * 工具类验证Excel文档 */public class WDWUtil {      /**       * @描述:是否是2003的excel,返回true是2003       * @param filePath       * @return       */      public static boolean isExcel2003(String filePath)  {              return filePath.matches("^.+\\.(?i)(xls)$");        }                   /**       * @描述:是否是2007的excel,返回true是2007       * @param filePath       * @return       */      public static boolean isExcel2007(String filePath)  {              return filePath.matches("^.+\\.(?i)(xlsx)$");        }              /**       * 验证是否是EXCEL文件       * @param filePath       * @return       */      public static boolean validateExcel(String filePath){            if (filePath == null || !(isExcel2003(filePath) || isExcel2007(filePath))){                  return false;              }              return true;      }}

utils: ReadExcel.java

package com.shiliu.game.utils;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.ArrayList;import java.util.Date;import java.util.List;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.commons.CommonsMultipartFile;import com.shiliu.game.domain.bean.Customer;/** * @author wkr * @Date 2016-11-18 * 工具类读取Excel类中内容 */public class ReadExcel {    //总行数    private int totalRows = 0;      //总条数    private int totalCells = 0;     //错误信息接收器    private String errorMsg;    //构造方法    public ReadExcel(){}    //获取总行数    public int getTotalRows()  { return totalRows;}     //获取总列数    public int getTotalCells() {  return totalCells;}     //获取错误信息-暂时未用到暂时留着    public String getErrorInfo() { return errorMsg; }      /**   * 读EXCEL文件,获取客户信息集合   * @param fielName   * @return   */  public List
getExcelInfo(MultipartFile Mfile){ //把spring文件上传的MultipartFile转换成CommonsMultipartFile类型 CommonsMultipartFile cf= (CommonsMultipartFile)Mfile; //获取本地存储路径 File file = new File("D:\\fileupload"); //创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。) if (!file.exists()) file.mkdirs(); //新建一个文件 File file1 = new File("D:\\fileupload\\" + new Date().getTime() + ".xls"); //将上传的文件写入新建的文件中 try { cf.getFileItem().write(file1); } catch (Exception e) { e.printStackTrace(); } //初始化客户信息的集合 List
customerList=new ArrayList
(); //初始化输入流 FileInputStream is = null; Workbook wb = null; try{ //根据新建的文件实例化输入流 is = new FileInputStream(file1); //根据excel里面的内容读取客户信息 //当excel是2003时 wb = new HSSFWorkbook(is); //当excel是2007时 //wb = new XSSFWorkbook(is); //读取Excel里面客户的信息 customerList=readExcelValue(wb); is.close(); }catch(Exception e){ e.printStackTrace(); } finally{ if(is !=null) { try{ is.close(); }catch(IOException e){ is = null; e.printStackTrace(); } } } return customerList; } /** * 读取Excel里面客户的信息 * @param wb * @return */ private List
readExcelValue(Workbook wb){ //得到第一个shell Sheet sheet=wb.getSheetAt(0); //得到Excel的行数 this.totalRows=sheet.getPhysicalNumberOfRows(); //得到Excel的列数(前提是有行数) if(totalRows>=1 && sheet.getRow(0) != null){
//判断行数大于一,并且第一行必须有标题(这里有bug若文件第一行没值就完了) this.totalCells=sheet.getRow(0).getPhysicalNumberOfCells(); }else{ return null; } List
customerList=new ArrayList
();//声明一个对象集合 Customer customer;//声明一个对象 //循环Excel行数,从第二行开始。标题不入库 for(int r=1;r

entity: Customer.java

package com.shiliu.game.domain.bean;/** * @author wkr * @Date 2016-11-18 * 实体类 */public class Customer {    private Integer id;    private String Customer1;    private String Customer2;    private String Customer3;        public Customer() {        super();    }    public Customer(Integer id, String customer1, String customer2,            String customer3) {        super();        this.id = id;        Customer1 = customer1;        Customer2 = customer2;        Customer3 = customer3;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getCustomer1() {        return Customer1;    }    public void setCustomer1(String customer1) {        Customer1 = customer1;    }    public String getCustomer2() {        return Customer2;    }    public void setCustomer2(String customer2) {        Customer2 = customer2;    }    public String getCustomer3() {        return Customer3;    }    public void setCustomer3(String customer3) {        Customer3 = customer3;    }}
Customer

效果页面:

转载于:https://www.cnblogs.com/wkrbky/p/6083606.html

你可能感兴趣的文章
浅谈 easyui tabs 的href和content属性
查看>>
【STL】Message Flood(set)
查看>>
关于技术趋势,写给奋斗中的程序员们
查看>>
批处理警惕等号前面的空格
查看>>
计算思维
查看>>
用 NodeJS 实现 BigPipe
查看>>
Orange's笔记(1)
查看>>
python集合,深浅copy
查看>>
java 图片处理工具类
查看>>
gearman简介及安装使用
查看>>
login.php织梦进不去,dedecms后台登录成功后进入不了后台的最终解决方法
查看>>
php二维数据签名验证,sing 签名验证
查看>>
matlab实验四循环结构程序设计,MATLAB实验四_循环结构程序设计.doc
查看>>
oracle dataguard详细,Oracle 11G DataGuard重启详细过程
查看>>
墨刀linux桌面版,深度商店应用Kedis、微信开发者工具、UltraEdit、墨刀
查看>>
xgad加密linux,一种机载XGA视频信息采集的设计与实现.pdf
查看>>
c语言 扑克牌大小,C语言实现简易扑克牌游戏
查看>>
android sqlite3 加密,Android SQLite文件加密
查看>>
android textview settypeface,【Android初级】使用TypeFace设置TextView的文字字体(附源码)...
查看>>
html页面引入ts文件,如何将ts文件中收到的参数显示到html页面
查看>>