프로젝트를 하다보면

변하지 않는 특정 엑셀 양식을 서버에 올려놓고 그 양식에 DB 데이터를 넣어서 엑셀 다운로드하는 작업이 종종 있습니다.

 

이럴때 하기의 소스를 이용하면 됩니다.

 

 

    @RequestMapping(value = "/P010001L/getBillingDetailMrsExcelDown/action.do", method = RequestMethod.POST)
    public void getBillingDetailMrsExcelDown(HttpServletRequest request, HttpServletResponse response, Locale locale, Model model) throws Exception
    {
        String fileName = "다운로드엑셀파일명.xlsx";
       
        String userId = "";
        HttpSession session = request.getSession();
        userId = (String) session.getAttribute("SESSION_USER_ID");
       
        // 프로젝트 안에 엑셀 양식을 넣어둠
        String path = this.getClass().getClassLoader().getResource("").getPath();
        String fullPath = URLDecoder.decode(path, "UTF-8");
        String pathArr[] = fullPath.split("/WEB-INF/classes/");
        System.out.println(fullPath);
        System.out.println(pathArr[0]);
        fullPath = pathArr[0] + "/WEB-INF/views/SparePartsExcelForm";
        String reponsePath = "";
        // to read a file from webcontent
        String baseFolder = new File(fullPath).getPath() + File.separatorChar;
        String baseFileName = "SPAREPARTS_MRS.xlsx";
        String outFileName = "SPAREPARTS_MRS_" + userId + ".xlsx";
        reponsePath = baseFolder + outFileName; // 복사될 파일 경로
        // 기본 양식 엑셀 파일을 복사한다.(덮어쓰기)
        fileCopy(baseFolder+baseFileName, reponsePath);
       
        File file = new File(reponsePath);
       
        InputStream workFileInputStream = new FileInputStream(reponsePath);

        Workbook wb = WorkbookFactory.create(workFileInputStream);
        Sheet sheet = wb.getSheetAt(0);
        // int num = sheet.getLastRowNum();
        // Row row = sheet.createRow(++num);

        // 엑셀에 내용 입력하기
        JSONArray jsonDataArray = new JSONArray(request.getParameter("param").toString());
        int iLength = jsonDataArray.length();
        for(int rownum = 0; rownum <iLength; rownum++)
        {
            Row row = sheet.createRow(rownum + 4);
           
            JSONObject jsonObject = jsonDataArray.getJSONObject(rownum);
            Map<String, Object> map = JsonUtil.JsonToMap(jsonObject.toString());
           
            String value = "";
           
            value = ("null".equals(String.valueOf(map.get("listNo"))) ? "" : String.valueOf(map.get("listNo")));
            row.createCell(0).setCellValue(value); // cell1
            
            value = ("null".equals(String.valueOf(map.get("listPreqNo"))) ? "" : String.valueOf(map.get("listPreqNo")));
            row.createCell(1).setCellValue(value); // cell2
            
            value = ("null".equals(String.valueOf(map.get("listBillingDate"))) ? "" : String.valueOf(map.get("listBillingDate")));
            row.createCell(2).setCellValue(value); // cell3
           
            value = ("null".equals(String.valueOf(map.get("listBillingGubun"))) ? "" : String.valueOf(map.get("listBillingGubun")));
            row.createCell(3).setCellValue(value); // cell4
            
            value = ("null".equals(String.valueOf(map.get("listSiteCd"))) ? "" : String.valueOf(map.get("listSiteCd")));
            row.createCell(4).setCellValue(value); // cell5
            
            value = ("null".equals(String.valueOf(map.get("listSaNo"))) ? "" : String.valueOf(map.get("listSaNo")));
            row.createCell(5).setCellValue(value); // cell6
            
            value = ("null".equals(String.valueOf(map.get("listEqpName"))) ? "" : String.valueOf(map.get("listEqpName")));
            row.createCell(6).setCellValue(value); // cell7

 

            value = ("null".equals(String.valueOf(map.get("listCapaExcel"))) ? "" : String.valueOf(map.get("listCapaExcel")));
            row.createCell(7).setCellValue(value); // cell8
            
            value = ("null".equals(String.valueOf(map.get("listCapaUnit"))) ? "" : String.valueOf(map.get("listCapaUnit")));
            row.createCell(8).setCellValue(value); // cell9

 

            value = ("null".equals(String.valueOf(map.get("listDetail_Item"))) ? "" : String.valueOf(map.get("listDetail_Item")));
            row.createCell(9).setCellValue(value); // cell10

 

            value = ("null".equals(String.valueOf(map.get("listSpecification"))) ? "" : String.valueOf(map.get("listSpecification")));
            row.createCell(10).setCellValue(value); // cell11
            
            value = ("null".equals(String.valueOf(map.get("listSpecificationUnit"))) ? "" : String.valueOf(map.get("listSpecificationUnit")));
            row.createCell(11).setCellValue(value); // cell12

 

            value = ("null".equals(String.valueOf(map.get("listPartNo"))) ? "" : String.valueOf(map.get("listPartNo")));
            row.createCell(12).setCellValue(value); // cell13

 

            value = ("null".equals(String.valueOf(map.get("listMaker"))) ? "" : String.valueOf(map.get("listMaker")));
            row.createCell(13).setCellValue(value); // cell14

 

            value = ("null".equals(String.valueOf(map.get("listQty"))) ? "" : String.valueOf(map.get("listQty")));
            row.createCell(14).setCellValue(value); // cell15

 

            value = ("null".equals(String.valueOf(map.get("listUnit"))) ? "" : String.valueOf(map.get("listUnit")));
            row.createCell(15).setCellValue(value); // cell16

 

            value = ("null".equals(String.valueOf(map.get("listWbsCode"))) ? "" : String.valueOf(map.get("listWbsCode")));
            row.createCell(16).setCellValue(value); // cell17

 

            value = ("null".equals(String.valueOf(map.get("listRequsitionDate"))) ? "" : String.valueOf(map.get("listRequsitionDate")));
            row.createCell(17).setCellValue(value); // cell18

 

            value = ("null".equals(String.valueOf(map.get("listRemark"))) ? "" : String.valueOf(map.get("listRemark")));
            row.createCell(18).setCellValue(value); // cell19
        }
       
        // 엑셀에 쓰기
        FileOutputStream fileOut = new FileOutputStream(reponsePath);
        wb.write(fileOut);
        fileOut.close();
       

        FileInputStream fileInputStream=null;
        ServletOutputStream servletOutputStream=null;
       
        try
        {
            String downName = null;
            String browser = request.getHeader("User-Agent");
           
            //파일 인코딩
            if(browser.contains("MSIE") || browser.contains("Trident") || browser.contains("Chrome")){            
                downName = URLEncoder.encode(fileName,"UTF-8").replaceAll("\\+", "%20");
            } else {              
                downName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
            }

            response.setHeader("Content-Disposition","attachment;filename=\"" + downName+"\"");            
            response.setContentType("application/octer-stream");
            response.setHeader("Content-Transfer-Encoding", "binary;");

            fileInputStream = new FileInputStream(file);
            servletOutputStream = response.getOutputStream();

            byte b [] = new byte[1024];
            int data = 0;
            while((data=(fileInputStream.read(b, 0, b.length))) != -1)
            {
                servletOutputStream.write(b, 0, data);
            }

            servletOutputStream.flush();
       } catch (Exception e) {
           e.printStackTrace();
       } finally{
           if(servletOutputStream!=null){
               try {
                   servletOutputStream.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
           if (fileInputStream!=null){
               try {
                   fileInputStream.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
       }
    }

 

 

//파일을 복사하는 메소드
    public static void fileCopy(String inFileName, String outFileName) {
        try {
            FileInputStream fis = new FileInputStream(inFileName);
            FileOutputStream fos = new FileOutputStream(outFileName);
     
            int data = 0;
            while((data=fis.read())!=-1) {
                fos.write(data);
            }
            fis.close();
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 

 

이상으로 웹서버 상에 존재하는 특정 엑셀 양식 파일을 읽어 그 파일에 DB 정보를 쓰고 엑셀 파일을 다운로드하는 작업이었습니다.

+ Recent posts

프로젝트를 하다보면

변하지 않는 특정 엑셀 양식을 서버에 올려놓고 그 양식에 DB 데이터를 넣어서 엑셀 다운로드하는 작업이 종종 있습니다.

 

이럴때 하기의 소스를 이용하면 됩니다.

 

 

    @RequestMapping(value = "/P010001L/getBillingDetailMrsExcelDown/action.do", method = RequestMethod.POST)
    public void getBillingDetailMrsExcelDown(HttpServletRequest request, HttpServletResponse response, Locale locale, Model model) throws Exception
    {
        String fileName = "다운로드엑셀파일명.xlsx";
       
        String userId = "";
        HttpSession session = request.getSession();
        userId = (String) session.getAttribute("SESSION_USER_ID");
       
        // 프로젝트 안에 엑셀 양식을 넣어둠
        String path = this.getClass().getClassLoader().getResource("").getPath();
        String fullPath = URLDecoder.decode(path, "UTF-8");
        String pathArr[] = fullPath.split("/WEB-INF/classes/");
        System.out.println(fullPath);
        System.out.println(pathArr[0]);
        fullPath = pathArr[0] + "/WEB-INF/views/SparePartsExcelForm";
        String reponsePath = "";
        // to read a file from webcontent
        String baseFolder = new File(fullPath).getPath() + File.separatorChar;
        String baseFileName = "SPAREPARTS_MRS.xlsx";
        String outFileName = "SPAREPARTS_MRS_" + userId + ".xlsx";
        reponsePath = baseFolder + outFileName; // 복사될 파일 경로
        // 기본 양식 엑셀 파일을 복사한다.(덮어쓰기)
        fileCopy(baseFolder+baseFileName, reponsePath);
       
        File file = new File(reponsePath);
       
        InputStream workFileInputStream = new FileInputStream(reponsePath);

        Workbook wb = WorkbookFactory.create(workFileInputStream);
        Sheet sheet = wb.getSheetAt(0);
        // int num = sheet.getLastRowNum();
        // Row row = sheet.createRow(++num);

        // 엑셀에 내용 입력하기
        JSONArray jsonDataArray = new JSONArray(request.getParameter("param").toString());
        int iLength = jsonDataArray.length();
        for(int rownum = 0; rownum <iLength; rownum++)
        {
            Row row = sheet.createRow(rownum + 4);
           
            JSONObject jsonObject = jsonDataArray.getJSONObject(rownum);
            Map<String, Object> map = JsonUtil.JsonToMap(jsonObject.toString());
           
            String value = "";
           
            value = ("null".equals(String.valueOf(map.get("listNo"))) ? "" : String.valueOf(map.get("listNo")));
            row.createCell(0).setCellValue(value); // cell1
            
            value = ("null".equals(String.valueOf(map.get("listPreqNo"))) ? "" : String.valueOf(map.get("listPreqNo")));
            row.createCell(1).setCellValue(value); // cell2
            
            value = ("null".equals(String.valueOf(map.get("listBillingDate"))) ? "" : String.valueOf(map.get("listBillingDate")));
            row.createCell(2).setCellValue(value); // cell3
           
            value = ("null".equals(String.valueOf(map.get("listBillingGubun"))) ? "" : String.valueOf(map.get("listBillingGubun")));
            row.createCell(3).setCellValue(value); // cell4
            
            value = ("null".equals(String.valueOf(map.get("listSiteCd"))) ? "" : String.valueOf(map.get("listSiteCd")));
            row.createCell(4).setCellValue(value); // cell5
            
            value = ("null".equals(String.valueOf(map.get("listSaNo"))) ? "" : String.valueOf(map.get("listSaNo")));
            row.createCell(5).setCellValue(value); // cell6
            
            value = ("null".equals(String.valueOf(map.get("listEqpName"))) ? "" : String.valueOf(map.get("listEqpName")));
            row.createCell(6).setCellValue(value); // cell7

 

            value = ("null".equals(String.valueOf(map.get("listCapaExcel"))) ? "" : String.valueOf(map.get("listCapaExcel")));
            row.createCell(7).setCellValue(value); // cell8
            
            value = ("null".equals(String.valueOf(map.get("listCapaUnit"))) ? "" : String.valueOf(map.get("listCapaUnit")));
            row.createCell(8).setCellValue(value); // cell9

 

            value = ("null".equals(String.valueOf(map.get("listDetail_Item"))) ? "" : String.valueOf(map.get("listDetail_Item")));
            row.createCell(9).setCellValue(value); // cell10

 

            value = ("null".equals(String.valueOf(map.get("listSpecification"))) ? "" : String.valueOf(map.get("listSpecification")));
            row.createCell(10).setCellValue(value); // cell11
            
            value = ("null".equals(String.valueOf(map.get("listSpecificationUnit"))) ? "" : String.valueOf(map.get("listSpecificationUnit")));
            row.createCell(11).setCellValue(value); // cell12

 

            value = ("null".equals(String.valueOf(map.get("listPartNo"))) ? "" : String.valueOf(map.get("listPartNo")));
            row.createCell(12).setCellValue(value); // cell13

 

            value = ("null".equals(String.valueOf(map.get("listMaker"))) ? "" : String.valueOf(map.get("listMaker")));
            row.createCell(13).setCellValue(value); // cell14

 

            value = ("null".equals(String.valueOf(map.get("listQty"))) ? "" : String.valueOf(map.get("listQty")));
            row.createCell(14).setCellValue(value); // cell15

 

            value = ("null".equals(String.valueOf(map.get("listUnit"))) ? "" : String.valueOf(map.get("listUnit")));
            row.createCell(15).setCellValue(value); // cell16

 

            value = ("null".equals(String.valueOf(map.get("listWbsCode"))) ? "" : String.valueOf(map.get("listWbsCode")));
            row.createCell(16).setCellValue(value); // cell17

 

            value = ("null".equals(String.valueOf(map.get("listRequsitionDate"))) ? "" : String.valueOf(map.get("listRequsitionDate")));
            row.createCell(17).setCellValue(value); // cell18

 

            value = ("null".equals(String.valueOf(map.get("listRemark"))) ? "" : String.valueOf(map.get("listRemark")));
            row.createCell(18).setCellValue(value); // cell19
        }
       
        // 엑셀에 쓰기
        FileOutputStream fileOut = new FileOutputStream(reponsePath);
        wb.write(fileOut);
        fileOut.close();
       

        FileInputStream fileInputStream=null;
        ServletOutputStream servletOutputStream=null;
       
        try
        {
            String downName = null;
            String browser = request.getHeader("User-Agent");
           
            //파일 인코딩
            if(browser.contains("MSIE") || browser.contains("Trident") || browser.contains("Chrome")){            
                downName = URLEncoder.encode(fileName,"UTF-8").replaceAll("\\+", "%20");
            } else {              
                downName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
            }

            response.setHeader("Content-Disposition","attachment;filename=\"" + downName+"\"");            
            response.setContentType("application/octer-stream");
            response.setHeader("Content-Transfer-Encoding", "binary;");

            fileInputStream = new FileInputStream(file);
            servletOutputStream = response.getOutputStream();

            byte b [] = new byte[1024];
            int data = 0;
            while((data=(fileInputStream.read(b, 0, b.length))) != -1)
            {
                servletOutputStream.write(b, 0, data);
            }

            servletOutputStream.flush();
       } catch (Exception e) {
           e.printStackTrace();
       } finally{
           if(servletOutputStream!=null){
               try {
                   servletOutputStream.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
           if (fileInputStream!=null){
               try {
                   fileInputStream.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
       }
    }

 

 

//파일을 복사하는 메소드
    public static void fileCopy(String inFileName, String outFileName) {
        try {
            FileInputStream fis = new FileInputStream(inFileName);
            FileOutputStream fos = new FileOutputStream(outFileName);
     
            int data = 0;
            while((data=fis.read())!=-1) {
                fos.write(data);
            }
            fis.close();
            fos.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

 

 

이상으로 웹서버 상에 존재하는 특정 엑셀 양식 파일을 읽어 그 파일에 DB 정보를 쓰고 엑셀 파일을 다운로드하는 작업이었습니다.

+ Recent posts