Servlet.java代码:
public void toExcel(HttpServletObject obj)
throws ServletException, IOException {
HttpServletRequest request = obj.getRequest();
HttpServletResponse response = obj.getResponse();
response.setContentType("text/html;charset=UTF-8");
StringBuffer fileurl = new StringBuffer("文件路径");//如 D:/xx/xx/xxx.xls
FileOutputStream fos = null;
WritableWorkbook wwb = null;
try {
fos = new FileOutputStream(fileurl.toString());
//打开文件
wwb = Workbook.createWorkbook(fos);
//生成名为“成绩”的工作表,参数0表示这是第一页
WritableSheet ws = wwb.createSheet("成绩", 0);
//填写表头数据
ws.addCell(new Label(0, 0, "学号"));
ws.addCell(new Label(1, 0, "姓名"));
ws.addCell(new Label(1, 0, "成绩"));
//填写表体数据
//第一条记录
ws.addCell(new Label(0, 1, "10001"));
ws.addCell(new Label(1, 1, "张三"));
jxl.write.Number number = new jxl.write.Number(2,1,80);
ws.addCell(number);
//第二条记录
ws.addCell(new Label(0, 2, "10002"));
ws.addCell(new Label(1, 2, "李四"));
jxl.write.Number number1 = new jxl.write.Number(2,2,85);
ws.addCell(number1);
//第三条记录
ws.addCell(new Label(0, 3, "10003"));
ws.addCell(new Label(1, 3, "王五"));
jxl.write.Number number2 = new jxl.write.Number(2,3,90);
ws.addCell(number2);
}catch(Exception e) {
System.out.println(e);
}finally {
if(wwb != null) {
try {
wwb.write();//刷新(或写入),生成一个excel文档
wwb.close();//关闭
fos.close();
exportXML(obj);//下载excel文件
}catch(Exception e) {
e.printStackTrace();
}
}
}
}
//下载excel文件
public void exportXML(HttpServletObject obj)
throws IOException {
HttpServletRequest request = obj.getRequest();
HttpServletResponse response = obj.getResponse();
String ENCODING="GB2312";
//内容类型
String CONTENT_TYPE="text/html;charset=gb2312";
//要下载的文件存放的路径
String downloadfiledir="XXX";
//设置request对象的字符编码
request.setCharacterEncoding(ENCODING);
//从request中取出要下载文件的名字
String filename = "xxx.xls";
if(filename==null||filename.trim().equals("")){
//设置response对象的ContentType
response.setContentType(CONTENT_TYPE);
//输出错误信息
PrintWriter out=response.getWriter();
out.println("<font color=red>导出文件失败!</font>");
out.close();
}else{
//下载文件的完整路径名
String fullfilename=downloadfiledir+filename;
//根据文件的类型设置response对象的ContentType
String contentType=getServletContext().getMimeType(fullfilename);
if(contentType==null) {
contentType="application/octet-stream";
}
response.setContentType(contentType);
//设置response的头信息
response.setHeader("Content-disposition","attachment;filename=\""+filename+"\"");
InputStream is=null;
OutputStream os=null;
try{
is=new BufferedInputStream(new FileInputStream(fullfilename));
//定义输出字节流
ByteArrayOutputStream baos=new ByteArrayOutputStream();
//定义response的输出流
os=new BufferedOutputStream(response.getOutputStream());
//定义buffer
byte[] buffer=new byte[4*1024]; //4k Buffer
int read=0;
//从文件中读入数据并写到输出字节流中
while((read=is.read(buffer))!=-1){
baos.write(buffer,0,read);
}
//将输出字节流写到response的输出流中
os.write(baos.toByteArray());
}catch(IOException e){
e.printStackTrace();
}finally{
//关闭输出字节流和response输出流
os.close();
is.close();
}
}
}
JSP代码:
<form id="form" method="post" action="./Servlet?method=toExcel">
<input type="submit" value="下载成绩表" />
</form>
注意以下几点:
1.不能通过在js中的$.getJSON("./Servlet", {method: "toExcel"});方式调用Servlet中的toExcel方法,必须通过form的action。
2.exportXML的参数不能是HttpServletRequest request,HttpServletResponse response(ps:并不清楚原因)
3.本人是新手,文章可能存在错误,请大神指教!