Hi~ Summers!!

JXL로 Excel파일 만들고 PC에 저장하기 본문

개발/JAVA

JXL로 Excel파일 만들고 PC에 저장하기

eNaNII 2006. 12. 14. 17:29

<%@ page language="java" contentType="text/html;charset=EUC-KR" %>
<%@ page import="java.util.*, java.io.*" %>
<%@ page import="jxl.*, jxl.write.*, jxl.format.*" %>
<%@ page import="kr.co.kt.adims.form.Top10Form" %>
<%
String filename = "excelConvert.xls";

WritableWorkbook workbook = Workbook.createWorkbook(new File("c:/"+filename));
WritableSheet sheet = workbook.createSheet("Sheet1", 0);

jxl.write.WritableCellFormat format= new WritableCellFormat();
jxl.write.WritableCellFormat format0= new WritableCellFormat();

format.setBackground(jxl.format.Colour.GRAY_25 );
format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN );
format.setAlignment(jxl.format.Alignment.CENTRE);
format0.setBackground(jxl.format.Colour.WHITE );
format0.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN );
format0.setAlignment(jxl.format.Alignment.CENTRE);
sheet.setColumnView(0,8);

jxl.write.Label label = null;
jxl.write.Blank blank = null;

label = new jxl.write.Label(0,0,"순위",format);
sheet.addCell(label);
label = new jxl.write.Label(1,0,"본부",format);
sheet.addCell(label);
label = new jxl.write.Label(2,0,"서버팜",format);
sheet.addCell(label);
label = new jxl.write.Label(3,0,"DHCP서버",format);
sheet.addCell(label);
label = new jxl.write.Label(4,0,"지사",format);
sheet.addCell(label);
label = new jxl.write.Label(5,0,"지점",format);
sheet.addCell(label);
label = new jxl.write.Label(6,0,"L3명(DHCP)",format);
sheet.addCell(label);
label = new jxl.write.Label(7,0,"EquipAlias",format);
sheet.addCell(label);
label = new jxl.write.Label(8,0,"LocationCode",format);
sheet.addCell(label);
label = new jxl.write.Label(9,0,"Mac Address",format);
sheet.addCell(label);
label = new jxl.write.Label(10,0,"수집날짜",format);
sheet.addCell(label);
label = new jxl.write.Label(11,0,"패킷수",format);
sheet.addCell(label);

int cnt = 0;

ArrayList staList = null;
Top10Form staForm = new Top10Form();

staList = (ArrayList)request.getAttribute("topList");

cnt = staList.size();

for(int i=0; i<cnt; i++)
{
    staForm = (Top10Form)staList.get(i);

    label = new jxl.write.Label(0, i+1, staForm.getNo(), format0);
    sheet.addCell(label);
    label = new jxl.write.Label(1, i+1, staForm.getBonbu(), format0);
    sheet.addCell(label);
    label = new jxl.write.Label(2, i+1, staForm.getServerParm(), format0);
    sheet.addCell(label);
    label = new jxl.write.Label(3, i+1, staForm.getEquipAlias(), format0);
    sheet.addCell(label);
    label = new jxl.write.Label(4, i+1, staForm.getJisa(), format0);
    sheet.addCell(label);
    label = new jxl.write.Label(5, i+1, staForm.getJijum(), format0);
    sheet.addCell(label);
    label = new jxl.write.Label(6, i+1, staForm.getL3Name1(), format0);
    sheet.addCell(label);
    label = new jxl.write.Label(7, i+1, staForm.getL3Name2(), format0);
    sheet.addCell(label);
    label = new jxl.write.Label(8, i+1, staForm.getL3LocationCode(), format0);
    sheet.addCell(label);
    label = new jxl.write.Label(9, i+1, staForm.getName(), format0);
    sheet.addCell(label);
    label = new jxl.write.Label(10, i+1, staForm.getRegDate(), format0);
    sheet.addCell(label);
    label = new jxl.write.Label(11, i+1, String.valueOf(staForm.getCnt()), format0);
    sheet.addCell(label);

}

workbook.write();
workbook.close();
%>

<%
//여기부터 화일 다운로드 창이 자동으로 뜨게 하기 위한 코딩(임시화일을 스트림으로 저장)
File file = new File ("c:/"+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();

%>

Comments