jsp怎么导出Excel表

本文介绍如何使用 Apache POI 处理 Excel 文件,包括读取、新增、修改和删除数据等操作。POI 支持跨平台使用,无需依赖 Windows 的 COM 组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前介绍了二种产生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所指到的地方 二、有兴趣的朋友可以参考   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.*" %> 读取Excel档案 "); //判断储存格的格式 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(""); } out.println("
<% 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("
"); row=sheet.getRow(i); for (y=0;y "); } %> 五、资料新增範例 <%@ page contentType="text/html;charset=MS950" import="java.util.*,java.io.*" %> <%@ page import="org.apache.poi.poifs.filesystem.*,org.apache.poi.hssf.usermodel.*" %> 插入资料至Excel档案 <% 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("储存成功 book1.xls"); } catch(IOException e) { out.println("产生错误,错误讯息:"+e.toString()); } %> 六、资料删除、修改範例 <%@ page contentType="text/html;charset=MS950" import="java.util.*,java.io.*" %> <%@ page import="org.apache.poi.poifs.filesystem.*,org.apache.poi.hssf.usermodel.*" %> 删除、修改资料至Excel档案 <% 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("储存成功 book1.xls"); } catch(IOException e) { out.println("产生错误,错误讯息:"+e.toString()); } %>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值