在jsp页面中,如何将数据导出为doc、xls格式的文件。
前台
<c:forEach items="${requestScopenewsListresult}" var="list">
<tr>
<td width="5%" style="text-align:center;"><span>${listid}</span></td>
<td width="35%" style="text-align:left; text-indent:2em;">
<a href="#" title="${listnewsContent}"><span>${listnewsTitle}</span></a>
</td>
<td width="15%" style="text-align:center;"><span>${listnewsCol }</span></td>
<td width="15%" style="text-align:center;"><span>${listnewsAuthor }</span></td>
<td width="20%" style="text-align:center;"><span>${listnewsDate }</span></td>
<td width="10%" style="text-align:center;">
<div style="float:left;width:50px;height:17px;background:url(/images/IcoBtngif)no-repeat;border: 0;background-position: -222px 0px;">
<a href="NewsActionid=${listid}&action=editnews">
<img width="50" height="17" style="border:0;" src="/images/Emptygif" /></a>
</div><input type="checkbox" name="chk" value="${listid}" />
</td>
</tr>
</c:forEach>
预期想实现的效果:当我点击某一个超链接的时候,跳转到一个servlet中,在里面进行相应的处理,处理完成后返回原页面。
提问:1、如何实现上面所说的效果。
2、点击超链接的时候,那个超链接应该注意些什么。因为在同一在页面中,可能存在多个<c:forEach></c:forEach>
3、在servlet里面,调用相应的处理方法的时候应该注意什么因为在这个项目中,我是基于MVC模式开发的(dao层与数据库层交互、domain层封装javaBean、service层与dao层、web层交互、web层主要负责接收数据、调用处理方法、跳转)
xls651jsp原始码如下
<%@ page contentType="application/msexcel" %>
<!-- 以上这行设定本网页为excel格式的网页 -->
<%
responsesetHeader("Content-disposition","inline; filename=test1xls");
//以上这行设定传送到前端浏览器时的档名为test1xls
//就是靠这一行,让前端浏览器以为接收到一个excel档
%>
<html>
<head>
<title>Excel档案呈现方式</title>
</head>
<body>
<table border="1" width="100%">
<tr>
<td>姓名</td><td>身份z字号</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档和上一个差不多,只有差别在这一行:
线上浏览的方式: responsesetHeader("Content-disposition","inline; filename=test1xls");
下载的方式: responsesetHeader("Content-disposition","attachment; filename=test2xls");
附注: 1以上纯以静态网页的方式呈现excel档,配合资料库,你便能以动态的报表方式做出excel报表了
2完全不用安装任何元件,或只能受限於win平台,一个简单的方式解决你的报表需求
3聪明的你,应该能举一反三,知道如何将网页资料以word的doc格式展现了吧!
(是不是只要把contentType改成"application/msword"以及filename的副档名改成doc就可以了!)
这样生成的 excel 表格 可以用excel 软件打开编辑 ,但是再用 jxl 解析就会出错 注意
//说思路:开始理解错了,以为让三个文件,变成一张整体的表以后求助最好带上源文件
//费老劲了把你这个去转成表格数据,然后又拆分成几个小细节表格恼火啊
//不过也学到知识了,csv文件
//这里有一个问题,就是合并的文件,并不是你想要的顺序,因为你的文件名毫无规律,如果有规律
//合并后,就会是按顺序的比如s1,s2,s3好了上代码:
import javaioFile;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioFileWriter;
import javaioFilenameFilter;
import javaioIOException;
import javaioPrintWriter;
import javaioSequenceInputStream;
import javautilArrayList;
import javautilCollections;
import javautilEnumeration;
public class CsvMerge {
private String path;// 路径;
private File dir, files[];// 目录,文件数组;
private SequenceInputStream sis;//序列流
private PrintWriter pw;// 输出流
private boolean flag;// 标记
private byte[] bys;//容器
public static void main(String[] args) {
new CsvMerge()init();//启动合并功能;
}
private void init() {
path = "K:\\IO测试\\合并Csv文件";// 确定路径;
dir = new File(path);// 目录位置
flag = direxists();
if (!flag) {
Systemoutprintln("目录不存在别费劲了");
return;
}
files = dirlistFiles(new FilenameFilter() {//扫描目录,需要被合并的碎片文件
@Override
public boolean accept(File dir, String name) {
return nameendsWith("csv");
}
});
ArrayList<FileInputStream> al = new ArrayList<FileInputStream>();// 创建文件读取流集合;
try {
for (int i = 0; i < fileslength; i++) // 创建分支流
aladd(new FileInputStream(files[i]getAbsoluteFile()));
} catch (FileNotFoundException e) {
eprintStackTrace();
}
Enumeration<FileInputStream> en=Collectionsenumeration(al);//拿到枚举对象;
sis=new SequenceInputStream(en);//初始化合并流;
bys=new byte[1024];
try {
File file=new File(dir,"Mercsv");//目标合并文件;
if(fileexists()) {
Systemoutprintln("文件已经存在");
return;
}
pw=new PrintWriter(new FileWriter(file),true);
for(int a=sisread(bys);a!=-1;a=sisread(bys)) {
pwprintln(new String(bys,0,a));
}
} catch (FileNotFoundException e) {
eprintStackTrace();
}catch(Exception e) {
eprintStackTrace();
}finally {
if(sis!=null) {
try {
sisclose();
} catch (IOException e) {
eprintStackTrace();
}
}
}
}
}
//标记的是合并后的文件,碎片文件,随便你放,如果想按照顺序,就把名字取的有顺序
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)