利用JAVA操作EXCEL文件(JAVA EXCEL API)
http://www.aygfsteel.com/javainthinking/archive/2005/07/18/7906.html
spring 生成Excel和PDF文件
http://www.aygfsteel.com/ctguzhupan/archive/2006/10/04/73371.html
javascript 操作 excel 全攻略
http://www.aygfsteel.com/fool/archive/2006/06/27/55285.aspx
JXL操作Excel
http://www.aygfsteel.com/ctguzhupan/archive/2006/10/07/73605.html
將Excel文件內(nèi)容寫入到數(shù)據(jù)庫
http://www.aygfsteel.com/ctguzhupan/archive/2006/10/07/73629.html
Java應(yīng)用iText動態(tài)生成PDF文件
http://www.aygfsteel.com/ctguzhupan/archive/2006/10/09/74090.html
sping 、jxl 生成excel文件下載
http://www.aygfsteel.com/ctguzhupan/archive/2006/10/08/73886.html
excel模板檢驗(yàn)與合并
http://www.aygfsteel.com/qujingbo/archive/2006/12/12/86322.html
通過構(gòu)造XML數(shù)據(jù)流下載成Excel文件
http://www.aygfsteel.com/wujiaqian/archive/2006/12/11/86970.html
根據(jù)RS取值的條數(shù),動態(tài)生成EXCEL的工作簿
http://www.aygfsteel.com/wujiaqian/archive/2006/12/08/86269.html
JfreeChart介紹
http://www.aygfsteel.com/ctguzhupan/archive/2006/08/10/62777.html
JSP動態(tài)輸出Excel及中文亂碼的解決
最近在網(wǎng)上看到一個(gè)用java來操縱excel的open?source,在weblogic上試用了一下,覺得很不錯(cuò),特此向大家推薦一下。

首先去http://www.andykhan.com/jexcelapi/index.html下載最新的JExcelApi,把jxl.jar置于你的classpath中。

寫一個(gè)javaBean,利用JExcelApi來動態(tài)生成excel文檔,我這里寫一個(gè)最簡單的,示意性的。復(fù)雜的你可能還要查詢數(shù)據(jù)庫什么的。

///////////////////////////Test.java///////////////////////////////////////////
package?com.jagie.test;
import?java.io.*;
import?jxl.*;
import?jxl.write.*;
import?jxl.format.*;
import?java.util.*;
import?java.awt.Color;


public?class?Test
{

public?static?void?writeExcel(OutputStream?os)?throws?Exception?
{
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?=?new?jxl.write.WritableFont(WritableFont.ARIAL,20,?WritableFont.BOLD,?false,
UnderlineStyle.NO_UNDERLINE,?jxl.format.Colour.GREEN);
jxl.write.WritableCellFormat?wcfFC?=?new?jxl.write.WritableCellFormat(wfc);
wcfFC.setBackground(jxl.format.Colour.RED);
labelC?=?new?jxl.write.Label(6,?0,?"中國愛我",wcfFC);
ws.addCell(labelC);
//寫入Exel工作表
wwb.write();
//關(guān)閉Excel工作薄對象
wwb.close();
}

//最好寫一個(gè)這樣的main方法來測試一下你的這個(gè)class是否寫好了。

public?static?void?main(String[]?args)throws?Exception
{
File?f=new?File("kk.xls");
f.createNewFile();
writeExcel(new?FileOutputStream(f));
}
}?

寫一個(gè)jsp,來利用Test這個(gè)javabean輸出excel文檔。

///////////////////////////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里面打開動態(tài)生成的excel文檔了。一點(diǎn)亂碼也沒有。

也許有人會問:response.reset();可不可以不要這一句,我的建議是一定要寫,除非你能保證response的buffer里面沒有別的東西。

還有人也許會問:我在jsp開頭加上<%@page?contentType="application/vnd.ms-excel;charset=GBK"?%>這一句,去掉response.setContentType("application/vnd.ms-excel");行不行?回答這個(gè)問題很簡單,就是查看jsp服務(wù)器編譯jsp后生成的java代碼,如果改成這樣,我的welogic7編譯test_excel.jsp后生成的java文件的示意性代碼是這樣的:

public?void?_jspService(javax.servlet.http.HttpServletRequest?request,?
javax.servlet.http.HttpServletResponse?response)?throws?java.io.IOException,?

javax.servlet.ServletException?
{?

//?declare?and?set?well-known?variables:
javax.servlet.ServletConfig?config?=?getServletConfig();
javax.servlet.ServletContext?application?=?config.getServletContext();
javax.servlet.jsp.tagext.Tag?_activeTag?=?null;
//?variables?for?Tag?extension?protocol

Object?page?=?this;
javax.servlet.jsp.JspWriter?out;
javax.servlet.jsp.PageContext?pageContext?=
javax.servlet.jsp.JspFactory.getDefaultFactory().getPageContext(this,?
request,?response,?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?
{?//?error?page?try?block
response.setContentType("application/vnd.ms-excel;charset=GBK");
out.print("\r\n\r\n\r\n\r\n");
out.print("\r\n");
//[?/test_excel.jsp;?Line:?6]
response.reset();?//[?/test_excel.jsp;?Line:?7]
//response.setContentType("application/vnd.ms-excel");?
//[?/test_excel.jsp;?Line:?8]
Test.writeExcel(response.getOutputStream());?//[?/test_excel.jsp;?Line:?9]

}?catch?(Throwable?__ee)?
{
while?(out?!=?null?&&?out?!=?_originalOut)?out?=?pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}

//before?final?close?brace
}?

很明顯,屏蔽response.setContentType("application/vnd.ms-excel");后,在Test.writeExcel(response.getOutputStream());之前,response.reset();?之后沒有設(shè)置response?contenttype的正確類型,當(dāng)然輸出為亂碼了。而正確輸出excel的jsp的編譯后源碼是這樣的:

public?void?_jspService(javax.servlet.http.HttpServletRequest?request,?
javax.servlet.http.HttpServletResponse?response)?throws?java.io.IOException,
javax.servlet.ServletException?


{?
//?declare?and?set?well-known?variables:
javax.servlet.ServletConfig?config?=?getServletConfig();
javax.servlet.ServletContext?application?=?config.getServletContext();
javax.servlet.jsp.tagext.Tag?_activeTag?=?null;
//?variables?for?Tag?extension?protocol

Object?page?=?this;
javax.servlet.jsp.JspWriter?out;
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?
{?//?error?page?try?block
out.print("\r\n");
//[?/test_excel.jsp;?Line:?2]
response.reset();?//[?/test_excel.jsp;?Line:?3]
response.setContentType("application/vnd.ms-excel");?//[?/test_excel.jsp;?Line:?4]
Test.writeExcel(response.getOutputStream());?//[?/test_excel.jsp;?Line:?5]

}?catch?(Throwable?__ee)?
{
while?(out?!=?null?&&?out?!=?_originalOut)?out?=?pageContext.popBody();
((weblogic.servlet.jsp.PageContextImpl)pageContext).handlePageException((Throwable)__ee);
}

?//before?final?close?brace
}?

大家可以看到在response.reset();之后,Test.writeExcel(response.getOutputStream());之前正確的設(shè)置了response的輸出內(nèi)容。所以輸出就正常了。
http://www.aygfsteel.com/javainthinking/archive/2005/07/18/7906.html
spring 生成Excel和PDF文件
http://www.aygfsteel.com/ctguzhupan/archive/2006/10/04/73371.html
javascript 操作 excel 全攻略
http://www.aygfsteel.com/fool/archive/2006/06/27/55285.aspx
JXL操作Excel
http://www.aygfsteel.com/ctguzhupan/archive/2006/10/07/73605.html
將Excel文件內(nèi)容寫入到數(shù)據(jù)庫
http://www.aygfsteel.com/ctguzhupan/archive/2006/10/07/73629.html
Java應(yīng)用iText動態(tài)生成PDF文件
http://www.aygfsteel.com/ctguzhupan/archive/2006/10/09/74090.html
sping 、jxl 生成excel文件下載
http://www.aygfsteel.com/ctguzhupan/archive/2006/10/08/73886.html
excel模板檢驗(yàn)與合并
http://www.aygfsteel.com/qujingbo/archive/2006/12/12/86322.html
通過構(gòu)造XML數(shù)據(jù)流下載成Excel文件
http://www.aygfsteel.com/wujiaqian/archive/2006/12/11/86970.html
根據(jù)RS取值的條數(shù),動態(tài)生成EXCEL的工作簿
http://www.aygfsteel.com/wujiaqian/archive/2006/12/08/86269.html
JfreeChart介紹
http://www.aygfsteel.com/ctguzhupan/archive/2006/08/10/62777.html
JSP動態(tài)輸出Excel及中文亂碼的解決

























































































































































