최근 인터넷에서 Java를 사용하여 Excel을 제어하는 오픈 소스를 보았습니다. weblogic에서 사용해 본 결과 매우 좋다고 생각합니다.
먼저 http://www.andykhan.com/jexcelapi/index.html 로 이동하여 최신 JExcelApi를 다운로드하고 클래스 경로에 jxl.jar을 넣으세요.
javaBean을 작성하고 JExcelApi를 사용하여 Excel 문서를 동적으로 생성합니다. 여기서는 가장 간단하고 개략적인 문서를 작성하겠습니다. 복잡하다면 데이터베이스 등을 쿼리해야 할 수도 있습니다.
///////////////////////////////Test.java////////////////// ///// /////////////////////////
패키지 com.jagie.test;
import java.io.*;
jxl.* 가져오기;
import jxl.write.*;
import jxl.format.*;
import java.util.*;
java.awt.Color 가져오기
공용 클래스 테스트{
public static void writeExcel(OutputStream os)에서 예외가 발생합니다.
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
jxl.write.WritableSheet ws = wwb.createSheet("TestSheet1", 0);
jxl.write.Label labelC = new jxl.write.Label(0, 0, "나는 중국을 사랑합니다");
ws.addCell(labelC);
jxl.write.WritableFont wfc = 새로운 jxl.write.WritableFont(WritableFont.ARIAL,20, WritableFont.BOLD, false,
UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.GREEN);
jxl.write.WritableCellFormat wcfFC = 새로운 jxl.write.WritableCellFormat(wfc);
wcfFC.setBackground(jxl.format.Colour.RED);
labelC = new jxl.write.Label(6, 0, "중국은 나를 사랑합니다",wcfFC);
ws.addCell(labelC);
//Exel 워크시트에 쓰기 wwb.write();
//Excel 통합 문서 개체를 닫습니다. wwb.close();
}
//클래스가 잘 작성되었는지 테스트하려면 이와 같은 메인 메소드를 작성하는 것이 가장 좋습니다.
public static void main(String[] args)throws 예외{
파일 f=새 파일("kk.xls");
f.createNewFile();
writeExcel(new FileOutputStream(f));
}
}
Javabean 테스트를 사용하여 Excel 문서를 출력하는 jsp를 작성합니다.
/////////////////////////////test_excel.jsp////////////////// //// //////
< %@page import="com.jagie.test.Test" %>
<%
response.reset();
response.setContentType("application/vnd.ms-excel");
Test.writeExcel(response.getOutputStream());
%>
IE를 사용하여 test_excel.jsp에 액세스하여 IE에서 동적으로 생성된 Excel 문서를 열 수 있습니다. 전혀 횡설수설하지 않습니다.
어떤 사람들은 다음과 같이 질문할 수 있습니다. response.reset(); 이 문장을 생략할 수 있습니까? 응답 버퍼에 다른 것이 없다고 보장할 수 없다면 이 문장을 작성해야 한다는 것입니다.
다른 사람들은 다음과 같이 질문할 수 있습니다. jsp 시작 부분에 < %@page contentType="application/vnd.ms-excel;charset=GBK" %>를 추가하고 response.setContentType("application/vnd.ms-excel" )을 제거합니다. 괜찮나요? 이 질문에 대한 대답은 매우 간단합니다. jsp를 컴파일한 후 jsp 서버에서 생성된 Java 코드를 확인하면 됩니다. 이렇게 변경하면 test_excel.jsp를 컴파일한 후 내 welogic7에서 생성된 Java 파일의 회로도 코드는 다음과 같습니다. 다음과 같습니다:
public void _jspService(javax.servlet.http.HttpServletRequest 요청,
javax.servlet.http.HttpServletResponse 응답)은 java.io.IOException을 발생시킵니다.
javax.servlet.ServletException {
// 잘 알려진 변수를 선언하고 설정합니다.
javax.servlet.ServletConfig config = getServletConfig();
javax.servlet.ServletContext 애플리케이션 = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// 태그 확장 프로토콜용 변수
Object page = this;
javax.servlet.jsp.JspWriter 출력;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this,
요청, 응답, null, true, 8192, true);
response.setHeader("Content-Type", "application/vnd.ms-excel; charset=GBK");
out = pageContext.getOut();
JspWriter _originalOut = out;
javax.servlet.http.HttpSession session = request.getSession(true)
try { // 오류 페이지 try 블록
response.setContentType("application/vnd.ms-excel;charset=GBK");
out.print("rnrnrnrn");
out.print("rn");
//[ /test_excel.jsp; 줄: 6]
response.reset(); //[ /test_excel.jsp; 라인: 7]
//response.setContentType("application/vnd.ms-excel");
//[ /test_excel.jsp; 줄: 8]
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} 잡기(던지기 가능 __ee) {
while (out != null && out != _originalOut) out = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//마지막 닫는 중괄호 앞...
}
분명히 response.setContentType("application/vnd.ms-excel");을 차단한 후, Test.writeExcel(response.getOutputStream()); 전, 그리고 response.reset(); 후에 올바른 유형의 응답 콘텐츠 유형은 다음과 같습니다. not set , 물론 출력이 왜곡됩니다. Excel을 올바르게 출력하는 jsp의 컴파일된 소스 코드는 다음과 같습니다.
public void _jspService(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse 응답)은 java.io.IOException을 발생시킵니다.
javax.servlet.ServletException
{
// 잘 알려진 변수를 선언하고 설정합니다.
javax.servlet.ServletConfig config = getServletConfig();
javax.servlet.ServletContext 애플리케이션 = config.getServletContext();
javax.servlet.jsp.tagext.Tag _activeTag = null;
// 태그 확장 프로토콜용 변수
Object page = this;
javax.servlet.jsp.JspWriter 출력;
javax.servlet.jsp.PageContext pageContext =
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true)
out = pageContext.getOut();
JspWriter _originalOut = out;
javax.servlet.http.HttpSession session = request.getSession(true)
try { // 오류 페이지 try 블록
out.print("rn");
//[ /test_excel.jsp; 라인: 2]
response.reset(); //[ /test_excel.jsp; 라인: 3]
response.setContentType("application/vnd.ms-excel"); //[ /test_excel.jsp;
Test.writeExcel(response.getOutputStream()); //[ /test_excel.jsp;
} 잡기(던지기 가능 __ee) {
while (out != null && out != _originalOut) out = pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}
//마지막 닫는 중괄호 앞...
}
response.reset(); 이후와 Test.writeExcel(response.getOutputStream()); 이전에 응답 출력 내용이 올바르게 설정되었음을 확인할 수 있습니다. 그럼 출력이 정상이네요.
마지막으로, 이 기사가 여러분에게 영감을 주길 바랍니다. 만약 실수가 있다면 비판하고 수정해주세요!