程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP生成Excel報表文檔源代碼

JSP生成Excel報表文檔源代碼

編輯:關於JSP

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">
試試看從網頁中把表格直接生成Excel,雖然不是直接從sql到excel,不過反而更加方便而且人性化。。 .

網上倒是找到了不少的資料,發現一段javascript的功能實現代碼,很不錯:
var elTable = document.getElementById("tb");
var oRangeRef = document.body.createTextRange();
oRangeRef.moveToElementText( elTable );
oRangeRef.execCommand( "Copy" ); .

var appExcel = new ActiveXObject( "Excel.Application" );
appExcel.Visible = true;
appExcel.Workbooks.Add().Worksheets.Item(1).Paste();
appExcel = null; 成功的人生,需要自己去經營,別再說了,莫再等了,現在就為自己的人生做好規劃,為人生點亮一盞明燈,贏在人生起跑點上。

實現功能就是把id為tb的表格內的數據都生成為excel,我試試了可行,但是放到服務器來運行就是script error的提示,然後網上到處求問,也找了百度空間的幾位高手朋友問了下,可是還是不得其法。。不過還是很感謝他們的熱心幫助 .

沒辦法,我只能用別的方法來實現了,其實滿喜歡上面的這個javascript的功能的,比較人性化。。可惜我黔驢技窮,無法用上它,哎!~ !

既然我幫客戶用jsp寫的程序,那麼我就還是用jsp來實現這個功能吧。。 版權申明:本站文章均來自網絡,如有侵權,請聯系028-86262244-215,我們收到後立即刪除,謝謝!

於是找到了這麼一個方法:
原文出自:http://www.jsp.mlc.edu.tw/viewitem.jsp?itemid=0000000065 根據專家觀察,這樣的理論和現象都是值得各位站長深思的,所以希望大家多做研究學習,爭取總結出更多更好的經驗!


***************************************************************************************************
一、將網頁資料以excel報表以線上浏覽方式呈現
xls651.jsp原始碼如下 . 
<%@ page contentType="application/msexcel" %>
<!-- 以上這行設定本網頁為excel格式的網頁 -->
<%
response.setHeader("Content-disposition","inline; filename=test1.xls");
//以上這行設定傳送到前端浏覽器時的檔名為test1.xls
//就是靠這一行,讓前端浏覽器以為接收到一個excel檔
%>
<html>
<head>
<title>Excel檔案呈現方式</title>
</head>
<body>
<table border="1" width="100%">
<tr>
<td>姓名</td><td>身份證字號</td><td>生日</td>
</tr>
<tr>
<td>李玟</td><td>N111111111</td><td>1900/11 /12</td>
</tr>
<tr>
<td>梁靜如</td><td>N222222222</td><td>1923/10 /1</td>
</tr>
<tr>
<td>張惠妹</td><td>N333333333</td><td>1934/12 /18</td>
</tr>
</table> ..
</body>
</html> .

二、將網頁資料以excel報表以下載的方式呈現
這個jsp檔和上一個差不多,只有差別在這一行:
線上浏覽的方式: response.setHeader("Content-disposition","inline; filename=test1.xls");
下載的方式: response.setHeader("Content-disposition","attachment; filename=test2.xls");
附注: 1.以上純以靜態網頁的方式呈現excel檔,配合資料庫,你便能以動態的報表方式做出excel報表了
2.完全不用安裝任何元件,或只能受限於win平台,一個簡單的方式解決你的報表需求
3.聰明的你,應該能舉一反三,知道如何將網頁資料以word的doc格式展現了吧!
(是不是只要把contentType改成"application/msword"以及filename的副檔名改成.doc就

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved