반응형
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>  
@RequestMapping("/excel")
public void excel(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {

	String fileName = "test_excel.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-Disposition", "attachment; filename=\"" + fileName + "\";");
	response.setHeader("Content-Transfer-Encoding", "binary");

	OutputStream os = null;
	SXSSFWorkbook wb = null;
	Sheet sheet = null;

	try {
		wb = new SXSSFWorkbook();

		sheet = wb.createSheet("test");

		Row row = sheet.createRow(0);
		Cell cell = null;
		cell = row.createCell(0);
		cell.setCellValue("a");
		cell = row.createCell(1);
		cell.setCellValue("b");
		cell = row.createCell(2);
		cell.setCellValue("c");

		os = response.getOutputStream();

		// 파일생성
		wb.write(os);
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		if (wb != null) {
			try {
				wb.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		if (os != null) {
			try {
				os.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

 

반응형

'java' 카테고리의 다른 글

java proxy  (0) 2021.04.07
JAVA 정규식 html javascript 삭제  (0) 2020.12.10
JAVA File to byte []  (0) 2013.01.11
[RCP] "org.eclipse.ui.ide.workbench" could not be found in the registry  (0) 2012.01.26
java File Delete  (0) 2011.03.03

+ Recent posts