Programing/JAVA

java poi 활용 json 데이터 엑셀 다운로드 기능 구현

리커니 2015. 10. 12.
반응형

 

java poi 활용 json 데이터 엑셀 다운로드 기능 구현

 

 

우선 poi jar 파일을 다운로드 하기 위해서는 아래 링크로 이동합니다.

 

https://poi.apache.org/download.html

 

위의 링크로 이동 후 Binary Distribution에서 zip파일 다운로드 하시면 됩니다.

다운로드 후 jar  파일이 있는 곳에 copy 해주시고 아래에 따라 진행하세요.

 

jsp 에서 ajax를 사용하여 json 데이터를 서버로 보내 java 파일에서 엑셀을 저장한다.

 

[jsp파일]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
if(confirm("엑셀파일(.xls)로 저장하시겠습니까?")==true){
    //json 방식으로 데이터 만들기
    // 여기서는 easyUi datagrid를 사용했기 대문에 아래와 같이 했다.
    // 일반 테이블 데이터를 가져올 경우에는 다르게 데이터를 가져온다.
    var dataArray = new Array();
    var rows = $('#dg').datagrid('getData').rows;
  
  if (rows.length<1){
   alert("엑셀파일로 저장할 데이터가 없습니다.");
   return;
  }
  
  for(var i=0; i<rows.length; i++){
   var dataObj = new Object();
   dataObj.컬럼명1 = rows[i].컬럼명1;
   dataObj.컬럼명2 = rows[i].컬럼명2;
   dataArray.push(JSON.stringify(dataObj));  //jsonarray에 object를 담는다.
  }
 
//json 형식으로 데이터를 가공한다.
  var result = {'"dataList"' :[dataArray]};
  var str='';
  for(var i in result){
   if(result.hasOwnProperty(i)){
    str += i + ":[" + result[i]+"]";
   }
  }
   
  var dataParam = "{"+str+"}";
   
//ajax를 사용하여 서버로 json 데이터를 보낸다.
  $.ajax({
   type : 'POST',  
   dataType : 'json'
   data: dataParam,
   url : '/excelDownload.do',  
   success : function(returnData) {
    if(returnData.resultCode==200){
     alert("D:/엑셀파일명.xls 로 저장되었습니다.");
    }else if(returnData.resultCode==300){
     alert("엑셀 데이터 저장에 실패하였습니다.");
    };
   },error:function(e){
    if(e.status==300){
     alert("엑셀 데이터 저장에 실패하였습니다.");
    };
   }
  }); 
 }
}
cs

 

[java 파일]

 

 /* 엑셀 다운로드 */
 @RequestMapping("value/excelDownload.do", produces="text/plain;charset=UTF-8")
 @ResponseStatus(HttpStatus.OK)
 @ResponseBody
 public String excelDownload(HttpServletRequest request, HttpServletResponse response, ModelMap model) throws Exception {
  System.out.println("exceldownload start!!");
  Gson gson = new Gson();
  BusViolationStatusSet set = new BusViolationStatusSet();
  
  //request로 json 데이터 받기 String으로 받아 json으로 변환
  String json = readJSONStringFromRequestBody(request);
  JSONObject jObj = new JSONObject(json);
  JSONArray dataArry = jObj.getJSONArray("dataList");
  
  // Workbook 생성
        Workbook xlsWb = new HSSFWorkbook(); // Excel 2007 이전 버전
        Workbook xlsxWb = new XSSFWorkbook(); // Excel 2007 이상

        // Sheet 생성
        Sheet sheet1 = xlsWb.createSheet("첫차막차미준수");
        // 컬럼 너비 설정
        sheet1.setColumnWidth(0, 10000);
        sheet1.setColumnWidth(20, 10000);



        Row row = null;
        Cell cell = null;

        int listCnt = dataArry.length();
      
        // excel 파일 저장
        //1번째 행 컬럼명 생성
        row = sheet1.createRow(0);
         

//엑셀 파일의 첫번째 줄에 컬럼병을 추가한다.
        cell = row.createCell(0);
        cell.setCellValue("첫번째 컬럼명");
        cell = row.createCell(1);
        cell.setCellValue("두번째 컬럼명");

        try {
            for (int i=1; i<listCnt+1; i++){
             row = sheet1.createRow(i); //두번째줄을 생성(i+1)
             cell = row.createCell(0); //두번째줄의 첫번째 행을 생성

//생성한 셀에 json데이터로 가져온 값을 입력
 cell.setCellValue(dataArry.getJSONObject(i-1).getString("데이터명1"));

// 반복해서 셀 생성 후 값 입력
 cell = row.createCell(1);
 cell.setCellValue(dataArry.getJSONObject(i-1).getString("데이터명2"));

            }
            File xlsFile = new File("D:/생성할엑셀명.xls");
            FileOutputStream fileOut = new FileOutputStream(xlsFile);
            xlsWb.write(fileOut);
            set.setResultCode(200);
   set.setResultCode(propertiesService.getInt("SUCCESS"));

        } catch (FileNotFoundException e) {
   e.printStackTrace();
   set.setResultCode(300);
   set.setResultMsg("LOGIN_FAILED");

        } catch (IOException e) {
            e.printStackTrace();

        }  
  return gson.toJson(set);
 }

 

 

반응형

댓글

💲 추천 글