ssh excel 导入 mysql_ssh poi解析excel并将数据存入数据库
做完了一個(gè)報(bào)表導(dǎo)入數(shù)據(jù)庫(kù)?功能?遇到幾個(gè)問題:一?、Poi解析excel?的兩種格式?xls?xlsx.?二、form表單上傳使用ajax
三、excel?單元格中有公式存在普通的讀取方式讀到的是公式不是數(shù)據(jù)
1.[代碼]先從上傳文件開始,最開始是套用項(xiàng)目中一直在用的validform
$(function() {
//ajax初始化 Validform 表單按鈕
$("#formobj").Validform({
tiptype : 4,
btnSubmit : "#btn_sub",
btnReset : "#btn_reset",
ajaxPost : false,//ajaxpost 是true的時(shí)候死活不能提交到后臺(tái)去
//為了實(shí)現(xiàn)功能只能,只能將就一下 但是問題也很嚴(yán)重,這里返回的值是
// 當(dāng)前form的對(duì)象,所以不管我后臺(tái)是什么情況前臺(tái)都會(huì)提示 上傳成功
callback: function (data){
var win = frameElement.api.opener;
if (data) {
win.tip("上傳成功!");
frameElement.api.hide();
//win.reloadTable(data);
}
win.parentLoad();
}
});
});
具體的validform可以百度下看看它的說明文檔
2.[代碼]ajax上傳
//上面說到 validform ajaxPost為false時(shí)form表單才能提交相對(duì)的 返回的數(shù)據(jù)是form的對(duì)象,實(shí)際上不能滿足我//的要求。所以功能實(shí)現(xiàn)之后 改!
//想到 html5 是有 FormData 的 于是
文件名稱:
選擇文件:
function ajsave(){
var formData = new FormData($( "#ajform" )[0]);
$.ajax({
url: path+"reportForUrlController/saveOrUpdata" ,
type: 'POST',
data:formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (data) {
var win = frameElement.api.opener;
if(data.success==true){
win.tip(data.msg);
frameElement.api.close();
win.parentLoad();
}else{
$.messager.alert('提示',data.msg);
}
}
});
}
//到了這里想著后臺(tái)處理基本什么情況前臺(tái)都能告訴用戶上傳的狀態(tài)并且能正常上傳了。
//實(shí)際上確實(shí)能滿足業(yè)務(wù)需求了
//測(cè)試發(fā)現(xiàn)問題了!IE10以下還是不能提交表單 FormData 不支持IE10以下的版本!
3.[代碼]ajaxFileUpload
//這很煩啊,本人一般都用火狐 谷歌之類的很少用到ie但是用戶不一定就不用ie啊
//于是 繼續(xù)改!
//引入 js
function ajsave(){
$("#ajform").ajaxSubmit({
dataType: 'json',
contentType: "application/json; charset=utf-8",
success : function (data, status){
var win = frameElement.api.opener;
if(data.success){
win.tip(data.msg);
frameElement.api.close();
win.parentLoad();
}else{
$.messager.alert('提示',data.msg);
}
}
});
}
//測(cè)試之后發(fā)現(xiàn)都可以了
//于是皆大歡喜 前臺(tái)搞定之后 該搞后臺(tái)了
//這種形式傳輸?shù)膄ile 是 multipart/form-data 記得在 form 中添加屬性
4.[代碼]poi解析(包括解析單元格公式)
//在代碼之前我一直在考慮怎么得到路徑然后 通過路徑去解析(本人對(duì)與上傳功能并不熟悉)
//后來才發(fā)現(xiàn)我傳到后臺(tái)的file 它本身就是一個(gè)流... 于是皆大歡喜......
@RequestMapping(value = "/addorupdate" ,method = RequestMethod.POST)
@ResponseBody
public AjaxJson addorupdate(HttpServletRequest req,
@RequestParam(value = "file", required = false) MultipartFile file,
@RequestParam(value = "fileName", required = true) String FileName )
throws Exception {
AjaxJson j = new AjaxJson();
InputStream is = file.getInputStream();
String isName = file.getOriginalFilename();
//直接將excel 按后綴不同轉(zhuǎn)成workbook格式的數(shù)據(jù)
String type = isName.substring(isName.lastIndexOf(".")+1);
Workbook book =null;
if(type.equals("xls")){
book = new HSSFWorkbook(is);
}else if(type.equals("xlsx")){
book = new XSSFWorkbook(is);
}
Sheet sheet = book.getSheetAt(0);
Row row = null;
for (int i = 1; sheet.getRow(i)!=null; i++) {
row = sheet.getRow(i);
for (int j = 0;row.getCell(j)!=null; j++) {
........
}
}
}
//之后的解析就不詳細(xì)介紹了
//最后在excel的單元格是公式的情況下 使用 //String.valueOf(row.getCell(j).getNumericCellValue());
//就能獲取到值了,
以上 form提交excel poi解析并存庫(kù)完成
總結(jié)
以上是生活随笔為你收集整理的ssh excel 导入 mysql_ssh poi解析excel并将数据存入数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql子查询sysdate_Orac
- 下一篇: java信号灯_java 多线程-信号灯