Java上傳Excel文件前後臺實現,前臺使用angular

HTML代碼:

隱藏文件上傳標籤,點擊上傳按鈕調用JS中的importGoodsStore()方法。

<button class="btn m-b-xs  btn-primary m-r-sm" data-ng-click="importGoodsStore()">上傳</button>
<input type="file" data-ng-model="file" name="file" onchange="angular.element(this).scope().fileChangeEvent()" id="file" style="display:none">

JS代碼:

調用importGoodsStore()方法,執行HTML中id爲file的點擊方法,上傳讀取文件傳入後臺等待返回,返回無論對錯清空file文件,使之可以進行二次上傳。

    
    //上傳
    $scope.importGoodsStore=function(){
    	var value=document.getElementById("file").click();
    }
    
    //上傳實現
    $scope.fileChangeEvent=function () {
	//判斷上傳控件的選定是否爲空,空則返回
        if (document.getElementById("file").files.length == 0) return;
    	var fileObj = document.getElementById("file").files[0];
        // 上傳的路徑
    	var FileController=$scope.url + "open/goods/importGoods;
    	var form = new FormData();
    	form.append("file", fileObj);
    	 var xhr = new XMLHttpRequest();
         xhr.open("post", FileController, true);
         xhr.onreadystatechange = function () {
             if (xhr.readyState == 4 && xhr.status == 200) {
        	// 上傳成功提示,清空file
    		var file = $("#file");
                file.after(file.clone().val(""));
                file.remove();
             }
         };
         xhr.send(form);
	}

Java後端代碼:

讀取文件中的內容,並保存到對象中。

提示:讀取文件中單元格是以第一行中單元格名稱讀取。

/**
* 導入商品
*
* @param file 上傳的文件
* @param request
* @return 上傳結果
* @date 2018年4月23日
* @since 1.1.13
*/
@SuppressWarnings("resource")
@RequestMapping(value = "open/goods/importGoods", method = RequestMethod.POST)
@ResponseBody
public Object importGoodsStore(@RequestParam(value = "file", required = false) MultipartFile file,
		MultipartHttpServletRequest request) {
    try {
    // 讀取上傳的文件
        CommonsMultipartFile cf = (CommonsMultipartFile) file;
        DiskFileItem fi = (DiskFileItem) cf.getFileItem();
        InputStream inputStream = fi.getInputStream();
        Workbook wb = null;
        wb = new XSSFWorkbook(inputStream);// 解析xlsx格式
        Sheet rs = wb.getSheetAt(0);
        if (rs != null) {
            // 創建集合list
            List<UploadQUERY> uploadQUERYList = new ArrayList<>();
            String storeCode = "";
            Row rowZero = rs.getRow(0);
            Map<String,Integer> map = new HashMap<String,Integer>();
            for (int i = 0; i < rowZero.getLastCellNum() ; i++) {
                rowZero.getCell(i).setCellType(CellType.STRING);
                map.put(rowZero.getCell(i).toString(),i);
            }
            //獲取Excel中的數據
            try {
            	int sum = rs.getLastRowNum();
                for (int i = 1; i <= sum; i++) {
                    //	對象,保存傳入的數據
                    UploadQUERY uploadQUERY = new UploadQUERY();
                    Row row = rs.getRow(i);
                    //讀區商品
                    if(row.getCell(map.get("sku")) !=null){
                        row.getCell(map.get("sku")).setCellType(CellType.STRING);
                        // sku
                        String sku = row.getCell(map.get("sku")).toString();
                        uploadQUERY.setSku(sku);
                       }
                    if (row.getCell(map.get("門店編碼")) != null) {
                        row.getCell(map.get("門店編碼")).setCellType(CellType.STRING);
                        // 門店編碼
                        storeCode = row.getCell(map.get("門店編碼")).toString();
                        uploadQUERY.setStoreCode(storeCode);
                    }
                    if (row.getCell(map.get("售價")) != null) {
                        row.getCell(map.get("售價")).setCellType(CellType.NUMERIC);
                        // 商品售價
                        Double salePrices = (Double)row.getCell(map.get("售價")).getNumericCellValue();
                        uploadQUERY.setSalePrice(salePrices);
                    }
                    uploadQUERYList.add(uploadQUERY);
                }
            } catch (Exception e) {
                logger.error("storeGoodsException:",e);
            }
        }
        return "成功";
    } catch (FileNotFoundException e) {
        logger.error("storeGoodsException:",e);
        return "失敗";
    } catch (IOException e) {
        logger.error("storeGoodsException:",e);
        return "失敗";
    }
}

Excel文件樣式:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章