엑셀 다운로드 예제를 찾다보니 이렇게 되었다.
짬뽕된것도 너무 많고 그러니.. 적당한 예제 찾기가 쉽지 않다.
앞으로 이대로 작성해보자.
/**
* 엑셀 파일이름 설정 및 다운
*/
@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 |
댓글