当前位置:软件学习 > Excel >>

java 导入excel数据demo

思路:
1、JSP 页面  包括浏览文件和提交文件
2、服务器对excel文件进行读出
3、将excel文件内容解析保存至数据库中,然后显示到页面上

必要的包:commons-fileupload.jar 、 commons-io.jar、jxl.jar。

一:JSP 页面
<%
if (request.getParameter("flag") != null && request.getParameter("flag").equals("true")){%>
<script type="text/javascript">
alert("中文电码表导入成功!");
     
            self.location.replace("${ctx}/ABROAD/PAPER/telegraphcodelist.jsp");
</script>
 <%}else if (request.getParameter("flag") != null && request.getParameter("flag").equals("false")){%>
  <script type="text/javascript">
alert("中文电码表导入失败!");
</script>
<%} %>
<form  name="attachmentForm" action="${ctx}/ABROAD/PAPER/telegraphcodelist.jsp" target="_self" method="post"  enctype="multipart/form-data">
  <input type="file"  size="50"  name="importExcel" id="importExcel" onkeydown='return false'; >
  <input class="sumb3" type="button" value="导入中文电码表" onClick="newAttachment();" id="buttonSave"/>
</form>
<script>


// --导入中文电码表
function newAttachment()
{
var filename = document.getElementById('importExcel').value;
if(filename=='')
{
alert('请选择要上传的文件');return false;
}
    var fileextend = filename.substring(filename.lastIndexOf('.')+1).toLowerCase();
var moreTemple = "xls";

if(fileextend.indexOf(moreTemple)<0)
{
alert('请选择excel文件!');
return false;
}

document.attachmentForm.action="${ctx}/telegraphcodeImport";
document.attachmentForm.submit();

}

</script>

 

二:Servlet
     package com.baosight.spes.abroad.base.commmon;


import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;


import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


import com.baosight.efmpx.system.util.SessionUtil;
import com.baosight.spes.abroad.base.domain.Telegraphcode;
import com.baosight.spes.abroad.group.agent.GROUPAgentFactory;
import com.baosight.spes.abroad.util.Constants;

 


public class FileImportForTelegraphcodeServlet extends HttpServlet{

/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L;


private static Log logger = LogFactory
.getLog(FileImportForTelegraphcodeServlet.class);

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
service(req, resp);
}

 

/**
* service
*
* @param req  HttpServletRequest
* @param resp HttpServletResponse
* @throws ServletException
* @throws IOException
*/
protected void service(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
RequestDispatcher dispatcher  = null;
boolean flag= false;

try {
List list=parseData(req,resp);
importToDB(req, list);
flag = true;
} catch (Exception e) {
flag= false;
  //e.printStackTrace();
logger.error(e.getMessage());
}
dispatcher =  req.getRequestDispatcher("ABROAD/PAPER/telegraphcodelist.jsp?flag="+flag);
dispatcher.forward(req,resp);
}

 

/** 转化EXCEL文件并存放到retList中
         *根据excel数据和数据格式的不同,以下代码的实现方式也会略有不同
* @param request
* @return retList
* @throws FileUploadException
* @throws FileUploadException
* @throws IOException
* @throws IOException
* @throws BiffException
* @throws BiffException
*/
private List parseData(HttpServletRequest req,HttpServletResponse resp) throws FileUploadException, IOException, BiffException  {
 req.setCharacterEncoding("utf-8");
 resp.setCharacterEncoding("utf-8");
 resp.setContentType("text/html;charset=utf-8");
 List resultList = new ArrayList();
 //默认路径
 String uploadTo = "D:\\";
 // 支持的文件类型
 String[] errorType = { ".xls" };
 //格式化日期
 SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
          //缓冲区域
//  File tempPathFile;
 if (FileUpload.isMultipartContent(req)) {
   DiskFileItemFactory factory = new DiskFileItemFactory();
            //设置缓冲区大小,这里是4kb
factory.setSizeThreshold(4096);
// 设置缓冲区目录
   // factory.setRepository(tempPathFile);
//设置最大文件尺寸,这里是4MB
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(4*1024*1024);
            // 开始读取上传信息
//开始读取上传信息
List fileItems = new ArrayList();
try {
fileItems = upload.parseRequest(req);
   } catch (FileUploadException e1) {
// e1.printStackTrace();
    logger.error(e1.getMessage());
}
   //依次处理每个上传的文件
   Iterator iter = fileItems.iterator();
//System.out.println("fileItems的大小是" + fileItems.size());
   logger.info("fileItems的大小是" + fileItems.size());
//正则匹配,过滤路径取文件名
String regExp = ".+\\\\(.+)$";
Pattern p = Pattern.compile(regExp);
while (iter.hasNext()){
FileItem item = (FileItem) iter.next();
                //忽略其他不是文件域的所有表单信息
//System.out.println("正在处理" + item.getFieldName());
logger.info("正在处理" + i

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,