JSP生成Excel报表文档源代码
excel报表的方法,一个过於简单,一个只能用於window平台(因为使用jdbc-odbc bridge),且无法使用到excel内部的各种公式或是方法,因此,今天介绍一个apache出的元件叫poi,它可以在unix或window平台处理word或excel档案,而不需要依靠window的com,并且可设定储存格格式、列印格式等等;今天我来介绍其中有关资料读取、新增、修改及删除的功能,若各位网友研究好其他的功能,麻烦email给我(ljj@mlc.edu.tw),分享给大家!
一、需要用的档案:jakarta-poi-1.8.0-dev-20020917.jar
几乎每天都有1.8.0的最新版(但非正式版),正式的版本是1.5.0
http://jakarta.apache.org/builds/jakarta-poi/nightly/
将档案复制到classpath所指到的地方
二、有兴趣的朋友可以参考
三、先建立一个叫做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来实现这个功能吧。。 版权申明:本站文章均来自网络,如有侵权,请联系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就
上一篇: jsp---设置javaBean的属性
下一篇: PS通道+滤镜制作漂亮的放射光线