일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 엑셀 UPDATE
- 근무날짜 경력계산
- jquery_cheat_sheet #jquery_quick_api_reference
- 시퀀스 초기화 프로시져
- 뒤로가기 방지
- JSP Standard Tag Library (JSTL) Tutorial
- ajax 배열
- 허드슨 포트 변경
- javascript Camel
- jquery_api #jquery #api
- 스킵 네비게이션
- DIV 팝업 이외 영역 클릭 시 팝업 닫기
- 폴더만 남기고 파일만 삭제
- 전화번호 형식 자동 변환
- eclipse 다국어
- eclipse properties
- i_tail
- taglib 만들기
- ajax 배열 파라미터
- Spring Annotation
- 화면보호기 실행 방지
- 팝업 종료
- 탭과 클릭 focus 이벤트 구분
- javascript 낙타
- css 말줄임
- 트리거 이벤트
- jQuery 백스페이스
- #오라클 데이터 복구
- eclipse 폰트
- 여러줄 한줄로
- Today
- Total
Hi~ Summers!!
POI로 Excel파일 만들고 PC에 저장하기 본문
<%@ page contentType="text/html;charset=euc-kr" errorPage="inc/error.jsp" %>
<%@ page import="org.apache.poi.hssf.util.*,org.apache.poi.hssf.usermodel.*,java.io.*,java.util.Date,java.sql.*,outbound.ObBean"%>
<%
String filename = "excelConvert.xls"; //엑셀로출력될 화일이름.. request.getParameter("filename")으로 받아서 사용하면 다른 화일이름으로도 저장이 가능합니다.
ObBean obBean = new ObBean(); //이건 제가사용하던 dbConnection, 한글변환 등의 method들이 있는 빈즈입니다. 이거 빼고 자신이 사용하는 dbConnection을 사용하심됩니다.
String queryStr = "sp_orderList '2002-11-01','2002-11-22','userid' " // queryStr 은 퀴리문으로 단순화하기 위하여 스토어드 프로시져를 사용합니다. (폼값으로 넘겨줘서사용해도 됩니다.이때는 post방식을..)
int rsCnt=1;
HSSFWorkbook wb = new HSSFWorkbook(); //workbook생성
HSSFSheet sheet1 = wb.createSheet("new sheet"); //worksheet에 new sheet생성
HSSFRow row = null;
HSSFCell cell = null;
HSSFCellStyle style = wb.createCellStyle();
style.setFillBackgroundColor(HSSFColor.AQUA.index);
style.setFillForegroundColor(HSSFColor.WHITE.index);
style.setFillPattern(HSSFCellStyle.BIG_SPOTS);
// 스타일 부분으로 alias 제목 부분에 아쿠아색의 빗살무늬를 지정합니다.
Statement stmt= null;
ResultSet rs = null;
stmt = obBean.createStatement();
rs = stmt.executeQuery(queryStr); // 쿼리를 실행합니다.
//컬럼명 찍는 부분
ResultSetMetaData rsmd = rs.getMetaData(); //resultset의 메타데이타를 생성합니다.(컬럼명이나,필드속성등의 정보를 받아올수 있습니다.)
int numberOfColumns = rsmd.getColumnCount(); //컬럼수를 카운드
String[] ColumnsName=new String[numberOfColumns]; //컬럼이름을 담을 변수를 배열로 지정합니다.
int[] ColumnsType = new int[numberOfColumns]; //컬럼의 타잎정보(즉,String , Integer, Decimal등 자료형을 가져옵니다.
row = sheet1.createRow((short)0);
for(int ii=0;ii<numberOfColumns;ii++){
ColumnsName[ii]=rsmd.getColumnName(ii+1);
ColumnsType[ii]=rsmd.getColumnType(ii+1);
cell = row.createCell((short)(ii+1));
cell.setEncoding( HSSFCell.ENCODING_UTF_16 ); // 한글 출력시에는 UTF_16으로 해야함. 한글이 2byte이기때문에..
cell.setCellValue(ColumnsName[ii]); // xls화일의 첫줄에 db의 컬럼명을 출력한다.
cell.setCellStyle(style); //스타일적용(글씨 색,배경색, 정렬, 크기등을 넣을수 있다.)
}
while(rs.next()){ //DB의 내용출력부분
row = sheet1.createRow((short)rsCnt);
for(int i=1;i<=numberOfColumns;i++){
cell = row.createCell((short) i);
cell.setEncoding( HSSFCell.ENCODING_UTF_16 );
switch(ColumnsType[i-1]){
case 93:
cell.setCellValue(rs.getString(i));
break;
case 4:
cell.setCellValue(rs.getInt(i));
break;
case 3:
cell.setCellValue(rs.getFloat(i));
break;
default:
cell.setCellValue(rs.getString(i));
break;
}
// case 93 , case 4... 등은 API의 java.sql.TYPE를 찾아보시면 나와있습니다.
}
rsCnt++;
}
//파일저장("_temp/"에 임시 저장을 합니다. 그리고 아래부분에서 다운받는 즉시 삭제합니다. 중복은 거의 없을 겁니다. 이부분에서 고생을 많이 했는데 더 좋은 방법있는분은 알려주세요.)
FileOutputStream fileOut = null;
try{
fileOut = new FileOutputStream("d:/tomcat4/webapps/root/_temp/"+filename);
}catch(FileNotFoundException e){
System.out.println(e);
}
try{
wb.write(fileOut);
fileOut.close();
}catch(IOException e){
System.out.println(e);
}
%>
<%
//여기부터 화일 다운로드 창이 자동으로 뜨게 하기 위한 코딩(임시화일을 스트림으로 저장)
File file = new File ("d:/tomcat4/webapps/root/_temp/"+filename); //해당 경로의 파일 객체를 만든다.
byte[] bytestream = new byte[(int)file.length()]; //파일 스트림을 저장하기 위한 바이트 배열 생성.
FileInputStream filestream = new FileInputStream(file); //파일 객체를 스트림으로 불러온다.
int i = 0, j = 0; //파일 스트림을 바이트 배열에 넣는다.
while((i = filestream.read()) != -1) {
bytestream[j] = (byte)i;
j++;
}
filestream.close(); //FileInputStream을 닫아줘야 file이 삭제된다.
try{
boolean success = file.delete(); //화일을 생성과 동시에 byte[]배열에 입력후 화일은 삭제
if(!success) System.out.println("<script>alert('not success')</script>");
} catch(IllegalArgumentException e){
System.err.println(e.getMessage());
}
// response.setContentType("application/x-msdownload;charset=EUC-KR"); //응답 헤더의 Content-Type을 세팅한다.
response.setHeader("Content-Disposition","attachment; filename="+filename); //Content-Disposition 헤더에 파일 이름 세팅.
OutputStream outStream = response.getOutputStream(); // 응답 스트림 객체를 생성한다.
outStream.write(bytestream); // 응답 스트림에 파일 바이트 배열을 쓴다.
outStream.close();
%>