Java poi Struts2 读取Excel 导入数据库


这篇文章是我第一个博客的第一篇文章,希望可以给大家一些帮助吧。

这是在做项目时用到一个功能 主要是实现批量导入用户信息到数据库,在做这个功能的时候也是在网上找了一些代码,感觉网上一些代码写的不是很全。我在这整理了一下,摘取出其中的读取excel文件数据代码,仅供参考。

下面是页面代码:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>读取Excel数据</title>
<style type="text/css">
div {
	position: relative;
	top: 120px;
	text-align:center;
}
.submit {
	clear: both;
	position: relative;
	border: 1px solid black;
	background: blue;
	color: white;
	width: 70px;
	height: 30px;
	border-radius: 6px;
	box-shadow: #000 3px 3px;
	cursor: pointer;
}
.submit:hover{
	background:#6D6DFF;
}
.submit:active{
	top:3px;
	left:3px;
	box-shadow: #000 0px 0px;
	background:#6D6DFF;
}
</style>
<script type="text/javascript">
	function formCheck(form){
		if(form.excelFile.value == ""){
			alert("请选择上传的文件");
			return false;
		}else{
			var str= form.excelFile.value;
            var lc = str.toLowerCase();
            var arr = lc.split(".");
            var extname = arr[arr.length-1];
           	if(extname != "xls" && extname != "xlsx"){
	             alert("请选择excel格式文件!");
	             return false;
            }
		}
	}
</script>
</head>
<body>
<div>
<form name="readExcel" action="/importExcel" method="post" enctype="multipart/form-data" onsubmit="return formCheck(this);">   
    Excel文件路径: <input type="file" name="excelFile"><br> 
    <input class="submit" type="submit" value="导入">
</form>
</div>
</body>
</html>

 
我用的是JSP,在页面中加了一段JS代码,用来判断是否为空和是否为excel格式文件。
下面是struts.xml的配置:

<package name="default" extends="json-default">
	<action name="importExcel" class="com.truth.action.ImportExcelAction">
		<result>/importUser.jsp</result>
	</action>
</package>

struts.xml 的配置我就不多说了,大家应该能看懂吧。


在写java代码之前,要在项目里引入一个poi.jar文件,

maven dependency:

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.7</version>
</dependency>


下面的是action中的代码:

package com.truth.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
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.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;

import com.opensymphony.xwork2.ActionSupport;

import com.truth.domain.User;

public class ImportExcelAction extends ActionSupport{
	private static final long serialVersionUID = 2078983971691770134L;
	private static final Logger log = Logger.getLogger(ImportExcelAction.class);

	private File excelFile; //上传的文件

    private String excelFileName; //保存原始文件名     

    private User user;

    //判断文件类型
    public Workbook createWorkBook(InputStream is) throws IOException{  
        if(excelFileName.toLowerCase().endsWith("xls")){  
            return new HSSFWorkbook(is);  
        }else if(excelFileName.toLowerCase().endsWith("xlsx")){
            return new XSSFWorkbook(is);
        }else{
        	return null;
        }
    }

    public String execute() throws Exception{
        Workbook book = createWorkBook(new FileInputStream(excelFile));
        if(book == null){//防止跳过页面直接访问报错
        	tip = "请选择excel格式文件";
        	return SUCCESS;
        }
        //book.getNumberOfSheets();  判断Excel文件有多少个sheet
        log.debug(book.getNumberOfSheets());
        //获取激活的sheet索引,就是在excel保存时显示的是哪个sheet
        log.debug(book.getActiveSheetIndex());
        //通过索引获取sheet信息
        Sheet sheet = book.getSheetAt(book.getActiveSheetIndex());
//        保存工作单名称
//        Row firstRow = sheet.getRow(0);
//        Iterator<Cell> iterator = firstRow.iterator();
        //保存列名
//        List<String> cellNames = new ArrayList<String>();
//        while (iterator.hasNext()) {
//            cellNames.add(iterator.next().getStringCellValue());
//        }
    	//用于存储用户信息
        List<User> users = new ArrayList<User>();
        //用于转换为手机号
        DecimalFormat df = new DecimalFormat("#");
    	//遍历用户信息
    	for (int i = 1;i <=sheet.getLastRowNum();i++){
    		Row ros = sheet.getRow(i);
			try {
				User u = new User();
				u.setName(ros.getCell(0).getStringCellValue());
				String phone = df.format(ros.getCell(1).getNumericCellValue());
				u.setPhone(phone.trim());
				u.setEmail(ros.getCell(2).getStringCellValue());
				u.setCompany(ros.getCell(3).getStringCellValue());
				users.add(u);
			} catch (Exception e){
				e.printStackTrace();
			}
    	}
        return SUCCESS;
    }

	public File getExcelFile() {
		return excelFile;
	}
	public void setExcelFile(File excelFile) {
		this.excelFile = excelFile;
	}
	public String getExcelFileName() {
		return excelFileName;
	}
	public void setExcelFileName(String excelFileName) {
		this.excelFileName = excelFileName;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	} 
}

上面的代码已经很清楚的教给大家怎么使用了。
在读取excel数据列是最好要判断每一列的类型,如有手机号列就在读取是就要调用Cell.getNumericCellValue();方法,否则就会报错。我做的这个excel文件里的每一列都是固定的,所以我就没有加判断。

希望能给大家一些帮助,如果有什么问题可以给我留言。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值