`
truth99
  • 浏览: 61373 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java poi Struts2 读取Excel 导入数据库

    博客分类:
  • Java
阅读更多

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


这是在做项目时用到一个功能 主要是实现批量导入用户信息到数据库,在做这个功能的时候也是在网上找了一些代码,感觉网上一些代码写的不是很全。我在这整理了一下,摘取出其中的读取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文件路径:&nbsp;<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文件,poi.jar下载地址

下面的是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文件里的每一列都是固定的,所以我就没有加判断。

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

相关推荐

Global site tag (gtag.js) - Google Analytics