2014-01-22 2 views
0

서블릿에서 Excel 파일을 만들고 클라이언트 브라우저로 보내려는 시도입니다. 독립 실행 형 프로그램에서 파일을 만들었지 만 컴퓨터에서 파일을 만들었지 만 할 때 이 서블릿에 아무것도하지 않았다서블릿으로 Excel 파일을 보내는 방법

서블릿 :

response.setContentType("text/html;charset=UTF-8"); 
     // PrintWriter out = response.getWriter(); 
     String[] items=request.getParameterValues("lecture"); 
     String course=request.getParameter("course"); 
     int sheets=Integer.parseInt(request.getParameter("sheets")); 
     List <XlElement> xlElements=getAllElements(items); 
     ServletOutputStream output=response.getOutputStream(); 
     try 
     { 
      response.setContentType("application/vnd.ms-excel"); 
      response.setHeader("Content-Disposition", "attachment; filename="+course+".xls"); 
      CreateXl xl=new CreateXl(); 
      xl.createScadualFile(output, xlElements, sheets); 
      output.println(course); 
     } 
     catch (Exception e) 
     { 
      System.out.println(e.toString()); 
      throw new ServletException("Exception in Excel Sample Servlet", e); 
     } 
      output.close(); 

createXl 클래스

private List<WritableSheet> xlSheets; 
    private String[] days={"א","ב","ג","ד","ה"}; 
    private final int numOfClasses=9; 
    private final int cellHeight= 1020; 
    private final int cellWidth=15; 
    public void createScadualFile(ServletOutputStream output, List <XlElement> items,int sheets) throws IOException, WriteException{ 
     xlSheets=new ArrayList<WritableSheet>(); 
     WritableWorkbook workbook = Workbook.createWorkbook(output); 
     for(int i=0;i<sheets;i++){ 
      WritableSheet sheet = workbook.createSheet("week "+(i+1), i); 
      xlSheets.add(sheet); 
     } 
     for(WritableSheet s: xlSheets){ 
      initSheet(s); 
     } 
     for(XlElement e: items){ 
      insertElement(e); 
     } 
     workbook.write(); 
     workbook.close(); 
    } 




    private WritableCellFormat getCellFormat(Colour colour, Pattern pattern) throws WriteException { 
     WritableFont cellFont = new WritableFont(WritableFont.TIMES, 12); 
     WritableCellFormat cellFormat = new WritableCellFormat(cellFont); 
     cellFormat.setBackground(colour, pattern); 
     cellFormat.setWrap(true); 
     cellFormat.setVerticalAlignment(jxl.format.VerticalAlignment.TOP); 
     return cellFormat; 
    } 
    private void initSheet(WritableSheet s) throws WriteException{ 
     for(int i=0;i<days.length;i++){ 
      Label l=new Label(i+1,0,days[i],getCellFormat(Colour.GREY_25_PERCENT,Pattern.SOLID)); 
      s.setColumnView(i+1,cellWidth); 
      s.addCell(l); 
     } 
     for(int i=0;i<numOfClasses;i++){ 
      Label l=new Label(0,i+1,Integer.toString(i+1),getCellFormat(Colour.GREY_25_PERCENT,Pattern.SOLID)); 
      s.setRowView(i+1, cellHeight); 
      s.addCell(l); 
     } 
    } 
    private void insertElement(XlElement e) throws WriteException{ 
     Label l=new Label(e.getCol(),e.getRow(),e.toXlString(), getCellFormat(Colour.RED,Pattern.SOLID)); 
     xlSheets.get(e.getWeek()).mergeCells(e.getCol(), e.getRow(), e.getCol(), e.getRow()+e.getSpan()-1); 
     xlSheets.get(e.getWeek()).addCell(l); 
    } 

용량 사람이 내가 잘못하고있는 중이 야 알아?

+0

"아무것도"하지 않았다면 * 실제 *했을 때 예외를 던질 가능성이 있습니다. 서버 로그를 확인하여 그 내용을 확인 했습니까? –

+0

나는 그것을 debuged했고 나는 어떤 예외도 던지기를 막 볼 수 없었다. 단지 코드를 달렸다. – user1839169

답변

1

먼저 response.setContentType()으로 전화해야합니다. Excel을 반환하려는 경우 콘텐츠 유형을 설정하는 곳을 "text/html;charset=UTF-8"으로 가져옵니다.

둘째, 이진 파일을 쓰고 난 후 출력 스트림에 텍스트를 쓰면 두 번째 오류가 발생합니다. output.println(course);

셋째로, 나는 실제로 output.close();이 필요하다고 생각하지 않으므로, 이것을 밖으로 가져갈 수도 있습니다.

+0

ok 나는 그 모든 것을했지만 브라우저에 어떤 파일도 아직받지 못했다. – user1839169