1、前端頁面:
<div id="div1" style="float: left; margin-right: 50px;">
<input id="articleImageFile" name="excelFile" type="file" style="width: 300px; display: inline;" />
<input id="saveZipButton" type="button" style="width: 60px;height: 35px;" value="上傳" />
</div>
2、js:
$(document).ready(function() {
// 點擊上傳按鈕保存excel
$("#saveZipButton").click(function() {
// 2020 新excel導入數據庫事件
newreport();
});
});
// 2020 導入excel文件
function newreport() {
var fileName = $("#articleImageFile").val();
if (fileName == null || fileName == "") {
alert("請選擇文件");
} else {
var fileType = fileName.substr(fileName.length - 4, fileName.length);
if (fileType == ".xls" || fileType == "xlsx") {
var formData = new FormData();
var name = $("#articleImageFile").val();
formData.append("file", $("#articleImageFile")[0].files[0]);
formData.append("name", name);// 這個地方可以傳遞多個參數
$.ajax({
url : getContextPathInfo() + "/execImport/upload",
type : 'POST',
async : false,
data : formData,
// 告訴jQuery不要去處理發送的數據
processData : false,
// 告訴jQuery不要去設置Content-Type請求頭
contentType : false,
beforeSend : function() {
console.log("正在進行,請稍候");
},
success : function(json) {
var checkYwState = false;
console.info("OnSuccess_NonNeedOpe_del方法");
if (typeof (json) == "object") {
if (json.resulttype == "SUCCESS") {
alert("Excel導入數據成功");
nsearch();
var deldm = json.appenddata.dm;
} else {
alert("Excel導入數據出現錯誤");
return false;
}
} else {
alert("Excel導入數據出現異常");
return false;
}
// if (responseStr == "1") {
// alert("導入成功");
// } else {
// alert("導入失敗");
// }
},
error : function(json){
alert("導入報錯");
}
});
}else {
alert("上傳文件類型錯誤!");
}
}
};
3、后台java:
①、控制層
//excel導入
@RequestMapping(value = "/upload" , method = RequestMethod.POST)
@ResponseBody
@Log(module = "車輛信息Excel表導入",operation = "新增")
public OperationResult export(@RequestParam("file") MultipartFile file,
HttpServletRequest request, HttpServletResponse response) {
Integer iscuccess = 0;
OperationResult result = new OperationResult(OperationResultTypeEnum.ERROR, "作廢記錄失敗");
try {
// @RequestParam("file") MultipartFile file 是用來接收前端傳遞過來的文件
// 1.創建workbook對象,讀取整個文檔
InputStream inputStream = file.getInputStream();
POIFSFileSystem poifsFileSystem = new POIFSFileSystem(inputStream);
HSSFWorkbook wb = new HSSFWorkbook(poifsFileSystem);
// 2.讀取頁腳sheet
HSSFSheet sheetAt = wb.getSheetAt(0);
List<Zbclbaseinfob> zbclbaseinfobLst = new ArrayList<Zbclbaseinfob>();//用來裝車輛實體的list
//*********************從第二行開始的excel導入(已成功)*******************
for(int rowNum = 1;rowNum <= sheetAt.getLastRowNum(); rowNum++ ){//從第二行開始取值(即rowNum=1開始)
//創建車輛實體對象
Zbclbaseinfob clEntity = new Zbclbaseinfob();
HSSFRow xssfRow = sheetAt.getRow(rowNum);
// 4.讀取每一行的單元格
String stringCellValue = xssfRow.getCell(0).getStringCellValue(); // 第一列數據
String stringCellValue2 = xssfRow.getCell(1).getStringCellValue();// 第二列
clEntity.setDm(UUID.randomUUID().toString());//生成隨機主鍵
clEntity.setClbh(stringCellValue);//給車輛編號賦值
clEntity.setCph(stringCellValue2);//給車牌號賦值
// 寫多少個具體看大家上傳的文件有多少列.....
zbclbaseinfobLst.add(clEntity);//
// execImportService.saveClExcel(clEntity);//循環去業務層單條保存車輛
// 測試是否讀取到數據,及數據的正確性
//System.out.println(stringCellValue);
}
// execImportService.manyClSave(zbclbaseinfobLst);//saveAll車輛表list去業務層保存
iscuccess = execImportService.manyClSave(zbclbaseinfobLst);//saveAll車輛表list去業務層保存
if (iscuccess == 1) {
result.setResulttype(OperationResultTypeEnum.SUCCESS);
result.setMsg("Excel導入成功");
} else {
result.setResulttype(OperationResultTypeEnum.ERROR);
result.setMsg("Excel導入失敗");
}
result.setAppenddata(iscuccess);
return result;
//*********************從第一行開始的excel導入(已成功)*******************
// // 3.循環讀取某一行
// for (Row row : sheetAt) {
// //創建車輛實體對象
// Zbclbaseinfob clEntity = new Zbclbaseinfob();
// // 4.讀取每一行的單元格
// String stringCellValue = row.getCell(0).getStringCellValue(); // 第一列數據
// String stringCellValue2 = row.getCell(1).getStringCellValue();// 第二列
// clEntity.setDm(UUID.randomUUID().toString());//生成隨機主鍵
// clEntity.setClbh(stringCellValue);//給車輛編號賦值
// clEntity.setCph(stringCellValue2);//給車牌號賦值
// // 寫多少個具體看大家上傳的文件有多少列.....
// execImportService.saveClExcel(clEntity);
// // 測試是否讀取到數據,及數據的正確性
// //System.out.println(stringCellValue);
// }
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();//若一段代碼前有異常拋出,並且這個異常被try...catch所捕獲,若此時catch語句中沒有拋出新的異常,則這段代碼能夠被執行
result.setResulttype(OperationResultTypeEnum.ERROR);
result.setMsg("Excel導入失敗");
return result;
}
}
②、service層
//excel轉換的存實體的list的saveAll
public Integer manyClSave(List<Zbclbaseinfob> zbclbaseinfobLst) {
zbclbaseinfobDao.saveAll(zbclbaseinfobLst);
return 1;
}