首先導入Excel數據需要幾樣東西
第一需要兩個依賴包,這里直接是在pom注入依賴
<!--excel--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.10.1</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency>
第二就是需要一個工具類,就和分頁的工具類一個性質,這里就不貼出來了太長 。百度搜索 “ExcelUtil”
代碼中用到的js文件 jquery-3.1.1.min.js、layer.js
下面開始貼js代碼
//h5的話,寫一個文件域就好了
//上傳Excel文件
uploadFile() { var file = $("#upload").val(); file = file.substring(file.lastIndexOf('.'), file.length); if (file == '') { layer.open({ content: '上傳文件不能為空!' , skin: 'msg' , time: 2 //2秒后自動關閉 }); } else if (file != '.xlsx' && file != '.xls') { layer.open({ content: '請選擇正確的excel類型文件!' , skin: 'msg' , time: 2 //2秒后自動關閉 }); } else { this.ajaxFileUpload(); } }, ajaxFileUpload() { var formData = new FormData(); formData.append("file", document.getElementById("upload").files[0]); $.ajax({ url: "${ctx}/bookcase/InputExcel", type: "POST", async: true, data: formData, processData: false, contentType: false, beforeSend: function () { layer.open({ type: 2 , content: '文件上傳中,請稍候' }); }, success: function (data) { layer.closeAll(); data = JSON.parse(data); if (data.state == 200) { layer.open({ content: data.message , skin: 'msg' , time: 1 //2秒后自動關閉 }); window.location.reload(); } else { layer.open({ content: data.message , skin: 'msg' , time: 2 //2秒后自動關閉 }); } } }); } },
到這里頁面的的操作就差不多了,下面是java的操作
@RequestMapping("InputExcel")
@ResponseBody
public ResultEntity InputExcel(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
ResultEntity result = new ResultEntity();
if (!file.isEmpty()) {
try {
//獲取原始的文件名
String originalFilename = file.getOriginalFilename();
String fileType = originalFilename.substring(originalFilename.lastIndexOf(".") + 1, originalFilename.length());
//默認從第一行開始讀取
Integer startRows = 1;
//獲取輸入流
InputStream is = file.getInputStream();
List<DoorAntRel> bindingList = new ArrayList<>();
List<Bookcase> bookcaseList = new ArrayList<>();
List<String[]> strings = ExcelUtil.readData(fileType, startRows, true, is);//這里使用輸入流把數據拿到
//遍歷Excel表每一行的數據
for (String[] str : strings) {//這里比較特殊,肯定有更簡便的辦法,暫時我就只有這個水平、、、尷尬
Bookcase bookcase = new Bookcase();
DoorAntRel doorAntRel = new DoorAntRel();
bookcase.setName(str[1]);
bookcase.setType(str[2]);
bookcase.setCom(Integer.parseInt(str[3]));
doorAntRel.setDoorName(str[4]);
doorAntRel.setDoorNo(Integer.parseInt(str[5]));
doorAntRel.setAntennaNo(Integer.parseInt(str[6]));
doorAntRel.setReadWriterId(Integer.parseInt(str[7]));
doorAntRel.setBookcaseId(Integer.parseInt(str[8]));
doorAntRel.setBadFlag(Integer.parseInt(str[9]));
doorAntRel.setDoorSlot(Integer.parseInt(str[10]));
bindingList.add(doorAntRel);
bookcaseList.add(bookcase);
}
boolean bookState = bookcaseService.insertOrUpdateBatch(bookcaseList);
boolean doorState = doorAntRelService.insertOrUpdateBatch(bindingList);
if(bookState){
if(doorState){
result.setState(HttpCode.SUCCESS);
result.setMessage("上傳文件成功!");
return result;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
result.setState(HttpCode.FAILED);
result.setMessage("上傳文件失敗!");
return result;
}
到這里差不多導入功能就差不多了,包括業務層、數據訪問的接口我就不寫了,也就是一條insert的事情
