jsp頁面顯示數據導出到excel表中
2024-09-05 00:19:51
供稿:網友
中國最大的web開發資源網站及技術社區,
excel報表的方法,一個過於簡單,一個只能用於window平臺(因為使用jdbc-odbc bridge),且無法使用到excel內部的各種公式或是方法,因此,今天介紹一個apache出的元件叫poi,它可以在unix或window平臺處理word或excel檔案,而不需要依靠window的com,并且可設定儲存格格式、列印格式等等;今天我來介紹其中有關資料讀取、新增、修改及刪除的功能,若各位網友研究好其他的功能,麻煩email給我([email protected]),分享給大家!
一、需要用的檔案:jakarta-poi-1.8.0-dev-20020917.jar
幾乎每天都有1.8.0的最新版(但非正式版),正式的版本是1.5.0
http://jakarta.apache.org/builds/jakarta-poi/nightly/
將檔案復制到classpath所指到的地方
二、有興趣的朋友可以參考
http://jakarta.apache.org/poi/
三、先建立一個叫做book1.xls的excel檔,內容如下
----------------------------------
項目 單價 數量 合計
cpu 7000 5 35000
硬碟 2500 2 5000
記憶體 1600 3 4800
----------------------------------
其中合計的欄位是設定公式,單價*數量
四、資料讀取範例
<%@ page contenttype="text/html;charset=ms950" import="java.util.*,java.io.*" %>
<%@ page import="org.apache.poi.poifs.filesystem.*,org.apache.poi.hssf.usermodel.*" %>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ms950">
<title>讀取excel檔案</title>
</head>
<body>
<table border="1" width="100%">
<%
fileinputstream finput = new fileinputstream(application.getrealpath("/")+"book1.xls" );
//設定fileinputstream讀取excel檔
poifsfilesystem fs = new poifsfilesystem( finput );
hssfworkbook wb = new hssfworkbook(fs);
hssfsheet sheet = wb.getsheetat(0);
//讀取第一個工作表,宣告其為sheet
finput.close();
hssfrow row=null;
//宣告一列
hssfcell cell=null;
//宣告一個儲存格
short i=0;
short y=0;
//以巢狀迴圈讀取所有儲存格資料
for (i=0;i<=sheet.getlastrownum();i++)
{
out.println("<tr>");
row=sheet.getrow(i);
for (y=0;y<row.getlastcellnum();y++)
{
cell=row.getcell(y);
out.print("<td>");
//判斷儲存格的格式
switch ( cell.getcelltype() )
{
case hssfcell.cell_type_numeric:
out.print(cell.getnumericcellvalue());
//getnumericcellvalue()會回傳double值,若不希望出現小數點,請自行轉型為int
break;
case hssfcell.cell_type_string:
out.print( cell.getstringcellvalue());
break;
case hssfcell.cell_type_formula:
out.print(cell.getnumericcellvalue());
//讀出公式儲存格計算後的值
//若要讀出公式內容,可用cell.getcellformula()
break;
default:
out.print( "不明的格式");
break;
}
out.println("</td>");
}
out.println("</tr>");
}
%>
</table>
</body>
</html>
五、資料新增範例
<%@ page contenttype="text/html;charset=ms950" import="java.util.*,java.io.*" %>
<%@ page import="org.apache.poi.poifs.filesystem.*,org.apache.poi.hssf.usermodel.*" %>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ms950">
<title>插入資料至excel檔案</title>
</head>
<body>
<%
fileinputstream finput = new fileinputstream(application.getrealpath("/")+"book1.xls" );
//設定fileinputstream讀取excel檔
poifsfilesystem fs = new poifsfilesystem( finput );
hssfworkbook wb = new hssfworkbook(fs);
hssfsheet sheet = wb.getsheetat(0);
//讀取第一個工作表,宣告其為sheet
finput.close();
hssfrow row=null;
//宣告一列
hssfcell cell=null;
//宣告一個儲存格
short i=4;
row=sheet.createrow(i);
//建立一個新的列,注意是第五列(列及儲存格都是從0起算)
cell=row.createcell((short)0);
cell.setencoding(hssfcell.encoding_utf_16);
//設定這個儲存格的字串要儲存雙位元
cell.setcellvalue("顯示卡");
cell=row.createcell((short)1);
cell.setcellvalue(1700);
cell=row.createcell((short)2);
cell.setcellvalue(8);
cell=row.createcell((short)3);
//設定這個儲存格為公式儲存格,并輸入公式
cell.setcellformula("b"+(i+1)+"*c"+(i+1));
try
{
fileoutputstream fout=new fileoutputstream(application.getrealpath("/")+"book1.xls");
wb.write(fout);
//儲存
fout.close();
out.println("儲存成功<a href='book1.xls'>book1.xls</a>");
}
catch(ioexception e)
{
out.println("產生錯誤,錯誤訊息:"+e.tostring());
}
%>
</body>
</html>
六、資料刪除、修改範例
<%@ page contenttype="text/html;charset=ms950" import="java.util.*,java.io.*" %>
<%@ page import="org.apache.poi.poifs.filesystem.*,org.apache.poi.hssf.usermodel.*" %>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ms950">
<title>刪除、修改資料至excel檔案</title>
</head>
<body>
<%
fileinputstream finput = new fileinputstream(application.getrealpath("/")+"book1.xls" );
//設定fileinputstream讀取excel檔
poifsfilesystem fs = new poifsfilesystem( finput );
hssfworkbook wb = new hssfworkbook(fs);
hssfsheet sheet = wb.getsheetat(0);
//讀取第一個工作表,宣告其為sheet
finput.close();
hssfrow row=null;
//宣告一列
hssfcell cell=null;
//宣告一個儲存格
row=sheet.getrow((short)4);
//取出第五列
if (row!=null)
sheet.removerow(row);
//先偵測第五列存不存在,若在的話將第五列刪除
row=sheet.getrow((short)3);
//取出第四列
cell=row.getcell((short)2);
//取出第三個儲存格
cell.setcellvalue(7);
//設定該儲存格值為7
cell=row.getcell((short)3);
cell.setcellformula(cell.getcellformula());
//上兩行為取出公式儲存格,并重新計算(因為剛才更新過計算公式的值)
//如果不做,公式計算後的值不會更新
try
{
fileoutputstream fout=new fileoutputstream(application.getrealpath("/")+"book1.xls");
wb.write(fout);
//儲存
fout.close();
out.println("儲存成功<a href='book1.xls'>book1.xls</a>");
}
catch(ioexception e)
{
out.println("產生錯誤,錯誤訊息:"+e.tostring());
}
%>
</body>
</html>