자바스크립트가 비활성화 되어있습니다.
자바스크립트가 활성화 되어야 콘텐츠가 깨지지 않고 보이게 됩니다.
자바스크립트를 사용할수 있도록 옵션을 변경해 주세요.
- willbsoon

본문 바로가기
Java

스프링 엑셀 다운로드

by willbsoon 2021. 8. 4.

엑셀 다운로드 예제를 찾다보니 이렇게 되었다.

짬뽕된것도 너무 많고 그러니.. 적당한 예제 찾기가 쉽지 않다.

 

앞으로 이대로 작성해보자.

 

  /**
   * 엑셀 파일이름 설정 및 다운
   */
	@RequestMapping("/excel-down")
    public void sampleDownForm(HttpServletRequest request, HttpServletResponse response) throws IOException{
        // 파일 생성
        SXSSFWorkbook workbook = this.excelFileDownloadProcess();

        String fileName = "샘플.xlsx";

        // 각 브라우저에 따른 파일이름 인코딩작업
        String browser = request.getHeader("User-Agent");
        if (browser.indexOf("MSIE") > -1) {
            fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        } else if (browser.indexOf("Trident") > -1) {       // IE11
            fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        } else if (browser.indexOf("Firefox") > -1) {
            fileName = "\"" + new String(fileName.getBytes("UTF-8"), "8859_1") + "\"";
        } else if (browser.indexOf("Opera") > -1) {
            fileName = "\"" + new String(fileName.getBytes("UTF-8"), "8859_1") + "\"";
        } else if (browser.indexOf("Chrome") > -1) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < fileName.length(); i++) {
               char c = fileName.charAt(i);
               if (c > '~') sb.append(URLEncoder.encode("" + c, "UTF-8"));
               else sb.append(c);
            }
            fileName = sb.toString();
        } else if (browser.indexOf("Safari") > -1){
            fileName = "\"" + new String(fileName.getBytes("UTF-8"), "8859_1")+ "\"";
        } else {
            fileName = "\"" + new String(fileName.getBytes("UTF-8"), "8859_1")+ "\"";
        }

        response.setContentType("Application/download;charset=utf-8");
        response.setHeader("Content-Transfer-Encoding", "binary");
        response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ";");

        OutputStream fileOut = null;
        try {
            fileOut = response.getOutputStream();
            workbook.write(fileOut);
            fileOut.flush();
        }catch(IOException e) {
//	        logger.error(e.toString());
        }finally {
            if(fileOut != null) fileOut.close();
            if(workbook != null) workbook.dispose();
        }
    }
    
    
  /**
   * 엑셀 파일 생성
   */
	public SXSSFWorkbook excelFileDownloadProcess() {
    
		String[] cellId = new String[] {"id","name","age",
			"gender","address","phonenumber","job"};
		String[] cellNms = new String[] {"id","이름","나이",
			"성별","주소","전화번호","직업"};
		String[] cellVals = new String[] {"1","willbsoon","31",
			"male","서울시 구로구","010-0000-1234","프로그래머"};
                
		SXSSFWorkbook workbook = new SXSSFWorkbook();
		workbook.setCompressTempFiles (true);
		// 시트 생성
		SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet("sample");

		//시트 열 너비 설정
		sheet.setColumnWidth(0, 3000); // 단위 : 1글자(아마도 영어?)너비/256 
		sheet.setColumnWidth(1, 2000);
		sheet.setColumnWidth(2, 3000);
		sheet.setColumnWidth(3, 2600);
		sheet.setColumnWidth(4, 2000);
		sheet.setColumnWidth(5, 10000);
		sheet.setColumnWidth(6, 3000);

		// 해당 1행의 첫번째 열 셀 생성- 영어 헤더
		Row headerRow = sheet.createRow(0);
		for(int i =0; i<cellId.length; i++) {
		    Cell headerCell = headerRow.createCell(i);
		    headerCell.setCellValue(cellId[i]);
		}
		// 해당 2행의 첫번째 열 셀 생성- 한글 헤더
		headerRow = sheet.createRow(1);
		for(int i =0; i<cellNms.length; i++) {
		    Cell headerCell = headerRow.createCell(i);
		    headerCell.setCellValue(cellNms[i]);
		}
        // 3번째 줄부터 데이터 추가
		Row bodyRow = sheet.createRow(2);
		for(int i=0; i<cellVals.length; i++) {
			Cell bodyCell = bodyRow.createCell(i);
		    bodyCell.setCellValue(cellVals[i]);
		}

		return workbook;

	}

 

끝!

'Java' 카테고리의 다른 글

자바 버전 변경  (0) 2022.12.31
Redhat에서 제공하는 jdk 버전별 다운로드  (0) 2021.07.26
JSTL 숫자형 변환  (0) 2021.04.14
javac 사용법 url  (0) 2021.03.14
자바 제너릭 정리(url)  (0) 2021.02.19

댓글