1. 程式人生 > >上傳,解析Excel檔案並儲存資料到資料庫

上傳,解析Excel檔案並儲存資料到資料庫

web框架:spring+hibernate+jQuery

HTML端程式碼:

<div class="file-up-content">
<table id="fileDiv" class="table">
<tr>
<td colspan="3">&nbsp;請採用excel檔案格式。 <input type="hidden" id="isHaveAttFile" name="isHaveAttFile"
value="0" /> <input type="hidden" id="resultfileurls"
name="resultfileurls" value="${report.resultinfoListString}" />
</td>
</tr>
<tr>
<td valign="top" colspan="3">
<table>
<tr id="fileList">
<c:if test="${!empty rinfoList }">
<c:forEach items="${rinfoList}" var="item" varStatus="var">
<tr id="p_${item.id }">
<td><a id="p_${item.id }_a" href="<c:url value='${item.localurl}'/>" target="_blank">${item.localurl }</a> 

                                                        <a href="javascript:;" onclick="removePic('${item.id}', '${item.localurl }','removefile', '${novkjcx.id }');">x</a>
</td>
</tr>
</c:forEach>
</c:if>
                        </tr>
</table> 

                <span id="uploadfileButton" style="color:#6699CC; cursor:pointer " title="點選繼續新增!">新增附件</span>
<span id="resultfileurlsShowMessage" style="color: red"></span>
</td>
<td>&nbsp; <br /></td>
</tr>
</table>
</div>

對應的js程式碼部分:

<!-- 檔案上傳彈窗開始 -->
<div id="fileText" class="easyui-window" modal="true" closed="true"
title="&nbsp;&nbsp;上傳" iconCls="icon-save"
style="width:500px;height:240px;padding:5px;background-color:#fafafa;">
<div class="easyui-layout" fit="true">
<div region="center" border="false"
style="padding:10px;background:#fff;border:1px solid #ccc;">
<form method="post" encoding="multipart/form-data">
<div id="fileQueue"></div>
瀏覽:<input type="file" id="uploadify" name="uploadify" /><br /> 解釋:
<textarea id="uploadDescribe" name="uploadDescribe" cols="45"
rows="3"></textarea>
</form>
</div>
<div region="south" border="false"
style="text-align:right;height:30px;line-height:30px;">
<a class="easyui-linkbutton" iconCls="icon-ok"
href="javascript:void(0)"
onClick="$('#uploadify').uploadifyUpload();">上傳</a> <a
class="easyui-linkbutton" iconCls="icon-cancel"
href="javascript:void(0)" onClick="$('#fileText').window('close');">取消</a>
</div>
</div>
</div>
<!-- 檔案上傳彈窗結束 -->

<script>
$(function() {
$("#uploadfileButton").click(function() {
uploadType = 4;
$("#uploadDescribe").val("");
uploadFileExt = "*.*";
try {
$('#uploadify').uploadifySettings("fileDesc", uploadFileExt);
$('#uploadify').uploadifySettings("fileExt", uploadFileExt);
} catch (err) {
}
upload();
});
});
</script>
<script>
var basePath = "";
var pdfpicPath = "/novelty/images/simplefile/pdf.png";
var reportid = $("#reportid").val();
var isUploadFileShow = false;
var uploadType, uploadFileExt;
$(function() {
$("#uploadfileButton").click(function() {
uploadType = 4;
$("#uploadDescribe").val("");
uploadFileExt = "*.*";
try {
$('#uploadify').uploadifySettings("fileDesc", uploadFileExt);
$('#uploadify').uploadifySettings("fileExt", uploadFileExt);
} catch (err) {
}
upload();
});
});
function upload() {
$('#fileText').window('open');
//window.opener.$("#fileText");
if (!isUploadFileShow) {
$('#uploadify')
.uploadify(
{
// 以下引數均是可選
'uploader' : '<c:url value="/js/jquery-uploadify/flash/uploadify.swf"/>', // 指定上傳控制元件的主體檔案,預設‘uploader.swf’
'script' : '<c:url value="/fileserver/upload"/>', // 指定伺服器端上傳處理檔案,預設‘upload.php’
'method' : 'post',
'scriptData' : {
'attid' : $("#attid").val(),
'describe' : $("#uploadDescribe").val()
},
'cancelImg' : '<c:url value="/js/jquery-uploadify/images/cancel.png"/>', // 指定取消上傳的圖片,預設‘cancel.png’
'fileDataName' : 'uploadify',
'auto' : false, // 選定檔案後是否自動上傳,預設false
'folder' : '/imageService/compressIMG', // 要上傳到的伺服器路徑,預設‘/’
'muti' : false, // 是否允許同時上傳多檔案,預設false
'queueID' : 'fileQueue',
//'queueSizeLimit' : 4,// 佇列中同時存在的檔案個數限制
'fileDesc' : uploadFileExt, // 出現在上傳對話方塊中的檔案型別描述
'fileExt' : uploadFileExt, // 控制可上傳檔案的副檔名,啟用本項時需同時宣告fileDesc
'sizeLimit' : 104857600, // 控制上傳檔案的大小,單位byte(10MB)
//'simUploadLimit' : 5,// 多檔案上傳時,同時上傳檔案數目限制
//'buttonText' : 'Browser',// 按鈕上的文字
//'displayData' : 'percentage',// 有speed和percentage兩種,一個顯示速度,一個顯示完成百分比
'onSelect' : function() {
$('#uploadify').uploadifySettings(
'scriptData',
{
'rnd' : Math.random(),
'attid' : $("#attid").val(),
'describe' : $("#uploadDescribe").val()
});
if (uploadType == 1) {
$('#uploadify').uploadifySettings(
'script',
'<c:url value="/fileserver/upload?uploadType=1"/>&attid='
+ $("#attid").val());
} else {
$('#uploadify').uploadifySettings(
'script',
'<c:url value="/fileserver/upload?uploadType=4"/>&attid='
+ $("#attid").val());
}
},
'onComplete' : function(event, queueID,
fileObj, response, data) {
var obj = $.parseJSON(response);
if (obj.flag == "true") {
ymPrompt.alert("上傳成功!" + obj.message,
300,
185,
"資訊提示",
function(data) {
if (data == "ok") {
$('#fileText').window('close');
$("#fileList")
.append(
" <tr id=\"p_" + obj.id + "\"><td><a id=\"p_" + obj.id+"_a\"" +" href=\"" + basePath + obj.url + "\" target=\"_blank\">"
+ obj.url
+ "</a> <a href=\"javascript:;\" onclick=\"removePic('"
+ obj.id
+ "', '"
+ obj.url
+ "','removefile', '"
+ reportid
+ "');\">x</a></td></tr>");
}
});
} else {
ymPrompt.alert("上傳失敗!" + obj.message,
300, 185, "資訊提示");
}
}
});
isUploadFileShow = true;
}
}
function removePic(id, url, what, reportid) {
ymPrompt.confirmInfo('確認刪除?', 300, 185, '資訊提示', function(data1) {
if (data1 == 'ok') {
$.ajax({
type : "post",
data : {
id : id,
url : url,
what : what,
reportid : reportid
},
url : '<c:url value="/embed/fileDelete.htm"/>?act=delete'
+ '&d=' + Math.random(),
dataType : "json",
beforeSend : function(XMLHttpRequest) {
},
success : function(data) {
if (data.flag == "true") {
if ('removecover' == what) {
var urls = $("#imageURL").val();
var href = $("#p_" + id + "_a").attr("href");
href = href.substr(14);
//urls=urls.replace(href,'').replace(";;",";");
$("#imageURL").val(urls);
} else if ('removefile' == what) {
var urls = $("#resultfileurls").val();
var href = $("#p_" + id + "_a").attr("href");
href = href.substr(14);
//urls=urls.replace(href,'').replace(";;",";");
$("#resultfileurls").val(urls);
}
$("#p_" + data.id).remove();
} else {
//ymPrompt.alert("刪除失敗!" + data.message, 300, 185, "資訊提示");
}
},
complete : function(XMLHttpRequest, textStatus) {
},
error : function(data) {
alert(data);
}
});
} else {
return false;
}
});
}
</script>

後端controller程式處理程式碼:

protected void formSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, Errors errors,
PmUserSession userSession, PageSession pageSession)
throws Exception {
String attid=request.getParameter("attid"); //attid為對應Excel檔案的UUID號
if(WebUtils.isNotNull(attid)){
List<AAA> rinfoList=dao.find(" from AAA obj where obj.attid='"+attid+"' and del=0"); //AAA為資料庫中存檔案路徑的表名用hibernate對映之後的名稱
if(rinfoList.size()>0){
File f=new File(rinfoList.get(0).getLocalurl());
ImportTerm i=new ImportTerm();
i.importTerm(f, dao,attid);
response.sendRedirect(request.getContextPath() + "/embed/datasetElement.htm?id="+request.getParameter("dataset"));
}
}


}

呼叫ImportTerm類的方法:

package cn.nsl.data;


import java.io.File;
import java.util.List;


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.ss.usermodel.WorkbookFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


import cn.nsl.domain.glob.DataSet;
import cn.nsl.domain.glob.DataSetElement;
import cn.nsl.domain.glob.Elements;
import cn.nsl.web.Application;


import com.jbetter.spring.orm.ICommonDao;




public class ImportTerm extends ImportExcel {

public void importTerm(File f,ICommonDao dao,String attid){
try {
Workbook wb;
wb = WorkbookFactory.create(f);
Sheet sheet = wb.getSheet("Sheet1");
importTermSheet(sheet,dao,dataset,attid);

} catch (Exception e) {
// TODO Auto-generated catch block
log.error(e);
e.printStackTrace();
}

}

void importTermSheet(Sheet sheet,ICommonDao dao,DataSet dataset,String attid) throws Exception{
int rowEnd = Math.max(100, sheet.getLastRowNum());
for(int i=1;i<=rowEnd;i++){
importTermProd(sheet.getRow(i),dao,dataset,attid);
}
}
void importTermProd(Row r,ICommonDao dao,DataSet dataset,String attid) throws Exception{
String code=getString(r, 0);
String cnname = getString(r, 1);
String name = getString(r, 2);
String frequency = getString(r, 3);
String limiting = getString(r, 4);
String multiJATS = getString(r, 5);
String remarks = getString(r, 6);

               biaoming c = new biaoming();
c.setFrequency(frequency);
c.setLimiting(limiting);
c.setMultiJATS(multiJATS);
c.setRemarks(remarks);
c.setAttid(attid);

dao.save(c);
}

public static void main(String []args){
System.setProperty("file.encoding", "UTF-8");
ApplicationContext apx = new ClassPathXmlApplicationContext("applicationContext-hibernate.xml");
dao = (ICommonDao) apx.getBean("commonDao");
ImportTerm i = new ImportTerm();
i.importTerm(new File("D://term.xlsx"),dao,null,"dd");
}


}

到此Excel上傳解析入庫完成。方法多種多樣,熟練一種就可以了。