써먹는 웹개발

[Java]엑셀 업로드 본문

웹개발/Java & Jsp

[Java]엑셀 업로드

kmhan 2018. 4. 16. 00:09


728x90
반응형

1. Js 소스 (엑셀 업로드 버튼 함수)

    fnImp_pop = function() {

        var data = new FormData();

        var $grid = $("#gridCustPri");

        var d = {

                getDetail: $grid.getRowData()

            };    


        if ($("#excelFile")[0].files.length == 0) {

            alert("선택된 파일이 없습니다.");

            return;

        }


        $.each($("#excelFile")[0].files, function(i, file) {

            data.append('file-' + i, file);

        });

        for(var i=0;i<$("#gridCustPri").getDataIDs().length;i++){

    $("#gridCustPri").jqGrid('saveRow',$("#gridCustPri").getDataIDs()[i]);

    }

        $.ajax({

            url: $HOST + "/excelMenuGrp",

            type: "POST",

            data: data,

            processData: false,

            contentType: false,

            success: function(result) {

            var cnt;

//            console.log(JSON.stringify(result)[0].itemCd);

//            return;

            // 기존 데이터와 엑셀 데이터 비교

            for(var i=0;i<$("#gridCustPri").getDataIDs().length;i++){

            cnt = 0;

            for(var j=0;j<result.length;j++){

        if($("#gridCustPri").getDataIDs()[i] == result[j].itemCd.toString()){

        cnt++;

        }

            }

        if(cnt != 1){

        alert("엑셀의 L5/UPN 값을 수정하면 안됩니다.");

                    var ids = $("#gridCustPri").jqGrid('getDataIDs');

                   

                    // 거래처 공급 단가 input 

                    for(i=0; i< ids.length; i++){

                    $("#gridCustPri").jqGrid('editRow', ids[i], false);

                    }

        return;

        }

        if($("#gridCustPri").getRowData()[i].date != result[i].date.toString()){

        alert("엑셀의 최근 수정일을 수정하면 안됩니다.");

                    var ids = $("#gridCustPri").jqGrid('getDataIDs');

                   

                    // 거래처 공급 단가 input 

                    for(i=0; i< ids.length; i++){

                    $("#gridCustPri").jqGrid('editRow', ids[i], false);

                    }

        return;

        }

            }

            $("#gridCustPri").clearGridData().setGridParam({

            datatype:"local"

            , data: result

            , rowNum: result.length

}).trigger('reloadGrid');

            }

        });

    }; 



2. Java 소스

  @RequestMapping(value = "/excelMenuGrp", method = {RequestMethod.POST})

@ResponseBody

public List<Map<String, Object>> insertorderitem(MultipartHttpServletRequest request) throws Exception{

String originalFileName = null;

        String originalFileExtension = null;

        Iterator<String> itr =  request.getFileNames();

        

        MultipartFile file = request.getFile(itr.next());

        if(file==null || file.isEmpty()){

            throw new RuntimeException("엑셀파일을 선택해 주세요");

        }

        

        originalFileName = file.getOriginalFilename();

        originalFileExtension = originalFileName.substring(originalFileName.lastIndexOf("."));

        File destFile = File.createTempFile(StringUtil.getRandomString(), originalFileExtension);

        System.out.println("destFile : " +destFile);

        

        try {

            file.transferTo(destFile);

        } catch (IllegalStateException | IOException e) {

            throw new RuntimeException(e.getMessage(),e);

        }

         

        //return service.insertorderitem(destFile);

ReadOption readOption = new ReadOption();

readOption.setFilePath(destFile.getAbsolutePath());

readOption.setOutputColumns("A","B","C","D","E");

readOption.setStartRow(2);


List<Map<String, String>> excelContent = ExcelRead.read(readOption);

List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();

  

for(Map<String, String> article : excelContent){

Map<String, Object> map = new HashMap<String, Object>();

map.put("itemCd", article.get("A"));

map.put("itemNm", article.get("B"));

map.put("price", article.get("C"));

map.put("custPri", article.get("D"));

map.put("date", article.get("E"));

result.add(map);

}

return result;

    }



728x90
반응형


Comments