本篇教程我们会看到如何把JSP页面导出到Excel中,会在已有的JSP页面中增加导出excel的功能。
许多时候对于用户来说,可以在excel中看到页面内容是很方便的。公共的方案会被导出成包含一些报告、数字等信息的表格。通过导出数据导出到excel中,最终用户也可以使用excel来做各种的分析,这一点对于你的java基本程序来实现,是有困难的。
这是对应的jsp源码(导出excel功能还没有加)。一个包含简单数据表格的jsp页面。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 401 Transitional//EN" "http://wwww3org/TR/html4/loosedtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Export to Excel - Demo</title>
</head>
<body>
<table align="center" border="2">
<thead>
<tr bgcolor="lightgreen">
<th>Sr No</th>
<th>Text Data</th>
<th>Number Data</th>
</tr>
</thead>
<tbody>
<%
for (int i = 0; i < 10; i++) {
%>
<tr bgcolor="lightblue">
<td align="center"><%=i%></td>
<td align="center">This is text data <%=i%></td>
<td align="center"><%=i i%></td>
</tr>
<%
}
%>
</tbody>
</table>
</body>
</html>
我们会添加一个“导出到excel”的超链接,它会把页面内容导出到excel文件中。那么这个页面会变成上图。
下面是新版本的jsp源码。这个版本增加了“导出到excel”超链接,而且增加了相应的功能:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 401 Transitional//EN" "http://wwww3org/TR/html4/loosedtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Export to Excel - Demo</title>
</head>
<body>
<%
String exportToExcel = requestgetParameter("exportToExcel");
if (exportToExcel != null
&& exportToExceltoString()equalsIgnoreCase("YES")) {
responsesetContentType("application/vndms-excel");
responsesetHeader("Content-Disposition", "inline; filename="
+ "excelxls");
}
%>
<table align="left" border="2">
<thead>
<tr bgcolor="lightgreen">
<th>Sr No</th>
<th>Text Data</th>
<th>Number Data</th>
</tr>
</thead>
<tbody>
<%
for (int i = 0; i < 10; i++) {
%>
<tr bgcolor="lightblue">
<td align="center"><%=i + 1%></td>
<td align="center">This is text data <%=i%></td>
<td align="center"><%=i i%></td>
</tr>
<%
}
%>
</tbody>
</table>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<%
if (exportToExcel == null) {
%>
<a href="exceljspexportToExcel=YES">Export to Excel</a>
<%
}
%>
</body>
</html>
这里有个例子供参考:
<%
String fileName=(String)requestgetAttribute("fileName");
fileName = new String(fileNamegetBytes("GBK"), "iso-8859-1");
responsereset();
responsesetContentType("application/vndms-excel;charset=GBK");
responseaddHeader("Content-Disposition","attachment; filename=" + fileName);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk"/>
</head>
<body>
<table width="100%" border="1" align="right" cellpadding="0" cellspacing="1">
<thead>
<tr>
<th>序号</th>
<th>编码</th>
<th>时间</th>
</tr>
</thead>
<tbody>
<c:forEach var="entity" items="${pageBeandataList}" varStatus="s">
<tr>
<td><c:out value="${sindex+1}"/></td>
<td><c:out value="${entitycode}"/></td>
<td><fmt:formatDate value="${entityreturnDate}" pattern="yyyy-MM-dd HH:mm:ss" /></td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
你是想将jsp中的数据导出到excel吧,有个关于java导出excel的jar包封装了这个功能,这个jar包你自己去百度下载下来就行,给你个示例,看看就能明白了。
package oacommonutils;
import javaioOutputStream;
import javautilList;
import javaxservlethttpHttpServletResponse;
import orgapachestruts2ServletActionContext;
import javalangreflectField;
import jxlWorkbook;
import jxlformatAlignment;
import jxlformatBorder;
import jxlformatBorderLineStyle;
import jxlformatVerticalAlignment;
import jxlwriteLabel;
import jxlwriteWritableCellFormat;
import jxlwriteWritableFont;
import jxlwriteWritableSheet;
import jxlwriteWritableWorkbook;
/
@author lsf
/
public class ExportExcel {
/
@param fileName EXCEL文件名称
@param listTitle EXCEL文件第一行列标题集合
@param listContent EXCEL文件正文数据集合
@return
/
public final static String exportExcel(String fileName,String[] Title, List<Object> listContent) {
String result="系统提示:Excel文件导出成功!";
// 以下开始输出到EXCEL
try {
//定义输出流,以便打开保存对话框______________________begin
HttpServletResponse response=ServletActionContextgetResponse();
OutputStream os = responsegetOutputStream();// 取得输出流
responsereset();// 清空输出流
responsesetHeader("Content-disposition", "attachment; filename="+ new String(fileNamegetBytes("GB2312"),"ISO8859-1"));
// 设定输出文件头
responsesetContentType("application/msexcel");// 定义输出类型
//定义输出流,以便打开保存对话框_______________________end
/ 创建工作簿 /
WritableWorkbook workbook = WorkbookcreateWorkbook(os);
/ 创建工作表 /
WritableSheet sheet = workbookcreateSheet("Sheet1", 0);
/ 设置纵横打印(默认为纵打)、打印纸 /
jxlSheetSettings sheetset = sheetgetSettings();
sheetsetsetProtected(false);
/ 设置单元格字体 /
WritableFont NormalFont = new WritableFont(WritableFontARIAL, 10);
WritableFont BoldFont = new WritableFont(WritableFontARIAL, 10,WritableFontBOLD);
/ 以下设置三种单元格样式,灵活备用 /
// 用于标题居中
WritableCellFormat wcf_center = new WritableCellFormat(BoldFont);
wcf_centersetBorder(BorderALL, BorderLineStyleTHIN); // 线条
wcf_centersetVerticalAlignment(VerticalAlignmentCENTRE); // 文字垂直对齐
wcf_centersetAlignment(AlignmentCENTRE); // 文字水平对齐
wcf_centersetWrap(false); // 文字是否换行
// 用于正文居左
WritableCellFormat wcf_left = new WritableCellFormat(NormalFont);
wcf_leftsetBorder(BorderNONE, BorderLineStyleTHIN); // 线条
wcf_leftsetVerticalAlignment(VerticalAlignmentCENTRE); // 文字垂直对齐
wcf_leftsetAlignment(AlignmentLEFT); // 文字水平对齐
wcf_leftsetWrap(false); // 文字是否换行
/ 以下是EXCEL开头大标题,暂时省略 /
//sheetmergeCells(0, 0, colWidth, 0);
//sheetaddCell(new Label(0, 0, "XX报表", wcf_center));
/ 以下是EXCEL第一行列标题 /
for (int i = 0; i < Titlelength; i++) {
sheetaddCell(new Label(i, 0,Title[i],wcf_center));
}
/ 以下是EXCEL正文数据 /
Field[] fields=null;
int i=1;
for(Object obj:listContent){
fields=objgetClass()getDeclaredFields();
int j=0;
for(Field v:fields){
vsetAccessible(true);
Object va=vget(obj);
if(va==null){
va="";
}
sheetaddCell(new Label(j, i,vatoString(),wcf_left));
j++;
}
i++;
}
/ 将以上缓存中的内容写到EXCEL文件中 /
workbookwrite();
/ 关闭文件 /
workbookclose();
} catch (Exception e) {
result="系统提示:Excel文件导出失败,原因:"+ etoString();
Systemoutprintln(result);
eprintStackTrace();
}
return result;
}
}
无非是这样的一个过程。先通过数据库查询出数据,放到List里,然后把这个List发往页面,然后遍历这个List把数据显示到这个表格里。 要想把数据导出到execel,很简单,把页面接受的这个List用jxl写到Execel就行了。具体将List导出到Execel的类如下:
package cmsdao;
import javaioIOException;
import javaioOutputStream;
import javasqlConnection;
import javasqlPreparedStatement;
import javasqlResultSet;
import javautilList;
import javaxservlethttpHttpServletResponse;
import jxlWorkbook;
import jxlwriteWritableSheet;
import jxlwriteWritableWorkbook;
import cmsutlisDbUtils;
public class ToExecelByQuery {
//方法接受两个参数,一个是list,这个地方我用了泛型。另一个参数是HttpServletResponse response
public static void toExcelBy(List<AccessLog> list,HttpServletResponse response) {
// 创建工作表
WritableWorkbook book=null;
responsereset();
// 创建工作流
OutputStream os =null;
try {
// 设置d出对话框
responsesetContentType("application/DOWLOAD");
// 设置工作表的标题
responsesetHeader("Content-Disposition",
"attachment; filename=xls");//设置生成的文件名字
os = responsegetOutputStream();
// 初始化工作表
book = WorkbookcreateWorkbook(os);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1printStackTrace();
}
try{
//以下是我做的导出日志的一个模版
int nCount = listsize();
WritableSheet sheet = bookcreateSheet("访问日志", 0);
// 生成名为"商品信息"的工作表,参数0表示这是第一页
int nI = 1;
// 表字段名
sheetaddCell(new jxlwriteLabel(0, 0, "日志编号"));
sheetaddCell(new jxlwriteLabel(1, 0, "用户ID"));
sheetaddCell(new jxlwriteLabel(2, 0, "用户姓名"));
sheetaddCell(new jxlwriteLabel(3, 0, "访问日期"));
sheetaddCell(new jxlwriteLabel(4, 0, "访问时间"));
sheetaddCell(new jxlwriteLabel(5, 0, "名片ID"));
sheetaddCell(new jxlwriteLabel(6, 0, "名片名称"));
sheetaddCell(new jxlwriteLabel(7, 0, "创建日期"));
sheetaddCell(new jxlwriteLabel(8, 0, "更新日期"));
// 将数据追加
for(int i=1;i<listsize();i++){
sheetaddCell(new jxlwriteLabel(0, i, listget(i)toString()));
sheetaddCell(new jxlwriteLabel(1, i, listget(i)getUserId()));
sheetaddCell(new jxlwriteLabel(2, i, listget(i)getUsername()));
sheetaddCell(new jxlwriteLabel(3, i, listget(i)getCrtTim()));
sheetaddCell(new jxlwriteLabel(4, i, listget(i)getComplTime()));
sheetaddCell(new jxlwriteLabel(5, i, listget(i)getCopId()));
sheetaddCell(new jxlwriteLabel(6, i, listget(i)getFirstname()));
sheetaddCell(new jxlwriteLabel(7, i, listget(i)getCrtTim()));
sheetaddCell(new jxlwriteLabel(8, i, listget(i)getUpdTim()));
}
bookwrite();
bookclose();
} catch (Exception e) {
eprintStackTrace();
}
}
}
大体思路就是这样的,别忘了在你的项目中导入JXL必要的jar包,这个包叫jxljar,你可以下载一个。希望能帮到你,欢迎追问。望采纳!
String path = "";//自己定义excel的路径
File file = new File(path);
filecreatenewFile();//创建一个空的excel
FileInputStream fileIn = new FileInputStream(path);//path为excel
POIFSFileSystem fs = new POIFSFileSystem(fileIn);
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wbgetSheetAt(0);//获得第一张sheet
//下面给表的第一行第一列赋值
HSSFRow row = sheetgetRow(0);//第一行对应0
HSSFCell cell = rowgetCell(0);//第一列对应0
cellsetCellValue("值");
//写回到excel
ByteArrayOutputStream baos = new ByteArrayOutputStream();
wbwrite(baos);
File file = new File(path);
FileOutputStream fo = new FileOutputStream(file);
baoswriteTo(fo);
foflush();
foclose();
一种方法就是直接在页面上复制,然后粘贴到Excel中去。还有一种就是在页面上做一个导出按钮,用户点击之后发请求到服务器,服务器通过使用POI或JXL等开源工具,将要导出的数据生成一个Excel给用户下载。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>EB页面导出为EXCEL文档的方法</title>
<script type="text/javascript">
<!-- download
function saveCode(obj) {
var winname = windowopen('', '_blank', 'top=10000');
var strHTML = documentalltableExcelinnerHTML;
winnamedocumentopen('text/html', 'replace');
winnamedocumentwriteln(strHTML);
winnamedocumentexecCommand('saveas','','excelxls');
winnameclose();
}
-->
</script>
</head>
<body>
<div id="tableExcel">
<table id="test" width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<td colspan="5" align="center">WEB页面导出为EXCEL文档的方法</td>
</tr>
<tr>
<td>列标题1</td>
<td>列标题2</td>
<td>列标题3</td>
<td>列标题4</td>
<td>列标题5</td>
</tr>
<tr>
<td>aaa</td>
<td>bbb</td>
<td>ccc</td>
<td>ddd</td>
<td>eee</td>
</tr>
<tr>
<td>AAA</td>
<td>BBB</td>
<td>CCC</td>
<td>DDD</td>
<td>EEE</td>
</tr>
<tr>
<td>FFF</td>
<td>GGG</td>
<td>HHH</td>
<td>III</td>
<td>JJJ</td>
</tr>
<tr>
<td>aaa</td>
<td>bbb</td>
<td>ccc</td>
<td>ddd</td>
<td>eee</td>
</tr>
<tr>
<td>AAA</td>
<td>BBB</td>
<td>CCC</td>
<td>DDD</td>
<td>EEE</td>
</tr>
<tr>
<td colspan="5">FFFGGGHHHIIIJJJ</td>
</tr>
<tr>
<td>aaa</td>
<td>bbb</td>
<td>ccc</td>
<td>ddd</td>
<td>eee</td>
</tr>
<tr>
<td>AAA</td>
<td>BBB</td>
<td rowspan="4">CCCHHHcccccc</td>
<td>DDD</td>
<td>EEE</td>
</tr>
<tr>
<td>FFF</td>
<td>GGG</td>
<td>III</td>
<td>JJJ</td>
</tr>
<tr>
<td>aaa</td>
<td>bbb</td>
<td>ddd</td>
<td>eee</td>
</tr>
<tr>
<td>aaa</td>
<td>bbb</td>
<td>ddd</td>
<td>eee</td>
</tr>
<tr>
<td>AAA</td>
<td>BBB</td>
<td>CCC</td>
<td>DDD</td>
<td>EEE</td>
</tr>
<tr>
<td>FFF</td>
<td>GGG</td>
<td>HHH</td>
<td>III</td>
<td>JJJ</td>
</tr>
</table>
</div>
<input type="button" value="另存为 Excel" onclick="saveCode(tableExcel)">
</body>
</html>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)