http://blog.csdn.net/airskys/archive/2005/03/31/334548.aspx
接下來看看我們的通用程序是怎么寫的。其實(shí)也沒有什么敲門,只是傳進(jìn)去了一個(gè)將要從數(shù)據(jù)庫(kù)中讀出數(shù)據(jù)的SQL語句,將執(zhí)行出來的結(jié)果寫入到 Excel中顯示出來而已。
import jxl.write.Label;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public void getExcelResult(String sql,OutputStream os) throws SQLException,IOException, WriteException{
//首先獲取結(jié)果集
//這里獲取RowSet的方法可以自己寫
CachedRowSet crs = this.GetResult(sql);
//然后將結(jié)果集轉(zhuǎn)化為Excel輸出
//初始化工作
WritableWorkbook wwb = null;
try {
wwb = Workbook.createWorkbook(os);
//創(chuàng)建工作表
jxl.write.WritableSheet ws = wwb.createSheet("Sheet1", 0);
//逐行添加數(shù)據(jù)
int i = 0;
while (crs.next()){
for (int j=1;j<=crs.getMetaData().getColumnCount();j++){
String s = crs.getString(j);
Label labelC = new Label(j-1, i, s);
ws.addCell(labelC);
}
i++;
}
} catch (Exception e) {
logger.error("export excel error:"+e);
e.printStackTrace();
} finally {
if (wwb != null){
wwb.write();
wwb.close();
}
}
}
看到了吧!其實(shí)這個(gè)方法很簡(jiǎn)單,就是提供一個(gè)查詢的SQL語句和一個(gè)OutPutStream對(duì)象就可以了。
接下來看看我是怎么在JSP頁面中調(diào)用并且生成文檔,然后提示用戶是打開還是保存的。
<%
response.reset();
response.setContentType("application/vnd.ms-excel");
String sql=request.getParameter("sql");
Sqlconn.getExcelResult(sql,response.getOutputStream());
%>
</body>
在前一個(gè)頁面中提交要查詢的SQL語句,在這里得到后,調(diào)用getExcelResult()方法創(chuàng)建Excel文件,就在這里一步完成了。可以看到,這里的OutPutStream對(duì)象我使用了Response的getOutPutSteam()方法得到了一個(gè)OutPutSteam,執(zhí)行的結(jié)果將會(huì)對(duì)response進(jìn)行操作。在此之前,已經(jīng)設(shè)定JSP文件的ContentType為application/vnd.ms-excel,即會(huì)得到這個(gè)response對(duì)象操作形成的excel文件。
當(dāng)然,這樣執(zhí)行出來的結(jié)果不是很好看。所以,可以想辦法修改生成文檔的樣式等。關(guān)于這方面,上面的地址中有很詳細(xì)的介紹。非常使用。大家可以根據(jù)自己的情況寫出各種各樣的樣式來,真是不錯(cuò)啊。