jsp调用java方法导出excel为啥会弹出保存或下载的对话框,调用完之后直接将文件保存到指定路径下即可。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp调用java方法导出excel为啥会弹出保存或下载的对话框,调用完之后直接将文件保存到指定路径下即可。相关的知识,希望对你有一定的参考价值。
调用java导出excel?你的excel是文件形式还是页面上的某个表格。如果是文件形式那就是下载了,弹出保存或下载窗口是应该的,但如果是页面上的某个表格那么不需要调用后台java来实现到处excel,直接js脚本语言就可以实现这个功能。。。
function AllAreaExcel()
var oXL = new ActiveXObject("Excel.Application");
var oWB = oXL.Workbooks.Add();
var oSheet = oWB.ActiveSheet;
var sel=document.body.createTextRange();
sel.moveToElementText(printb);
sel.select();
sel.execCommand("Copy");
oSheet.Paste();
oXL.Visible = true;
sel.moveToElementText(printb); 这句中的printb是代表需要导入的表格id 参考技术A 本身就是一种下载啊,你下载到本地就算是导出了啊追问
只需要导出到指定的路径,不需要弹出下载或保存的窗口,而且窗口显示的名字是jsp的名字,下载的文件内容是jsp的内容,所以弹出的窗口根本就不对。
追答噢,那是你配置不对噢,是不是用struts下载的?,如果真的是实现客户端导出功能,就一定有个下载的弹出框的
jsp调用java方法导出excel为啥没弹出保存或下载的对话框 (代码如下)请高手指点
public String CreateSimpleExcel() throws Exception
//HttpServletResponse response = this.response;
List<Report_da1> list = report_da1ServiceImpl.CreateSimpleExcel(report_da1);
List<C1param> tpl = paramService.getParamListByCode(SystemConstant.Transaction_Type);
List<C1param> sl = paramService.getParamListByCode(SystemConstant.Trade_Ledger_Status);
boolean flag = false;
try
OutputStream os = response.getOutputStream();// 取得输出流
response.setContentType("application/msexcel;charset=UTF-8");//定义输出类型
response.reset();//清除缓冲中的数据
response.setHeader("Content-disposition", "attachment; filename=fine.xls");//设定输出文件头
response.flushBuffer();//将缓冲区中的所有数据发送到客户端
//File outFile = new File("D:" + File.separator + "代理商日交易情况统计表.xls");
//OutputStream os = new FileOutputStream(outFile);
// 创建Excel工作薄
WritableWorkbook wwb = Workbook.createWorkbook(os);
String[] title = "编码","统计日期","代理商编码","代理商名称","交易类型","交易状态","累计金额","累计笔数";
String exportName = "代理商日交易情况统计";
WritableSheet sheet = wwb.createSheet(exportName, 0);
Label label;
for(int i=0;i<title.length;i++) // Label(x,y,z) 代表单元格的第x+1列,第y+1行, 内容z // 在Label对象的子对象中指明单元格的位置和内容
label = new Label(i,0,title[i]); // 将定义好的单元格添加到工作表中
sheet.addCell(label);
sheet.setColumnView(2,17);
sheet.setColumnView(3,10);
if(list !=null)
for (int i = 0; i < list.size(); i++)
Report_da1 r = list.get(i);
String status = "";
String tradeType="";
if(tpl!=null)
for(int j=0;j<tpl.size();j++)
C1param p = tpl.get(j);
if(r.getTrade_type().equals(p.getValue()))
tradeType = p.getName();
break;
if(sl!=null)
for(int j=0;j<sl.size();j++)
C1param a = sl.get(j);
if(r.getTrade_status().equals(a.getValue()))
status = a.getName();
break;
label = new Label(0, i+1, ""+r.getId());//添加运营商
sheet.addCell(label);
label = new Label(1, i+1,""+r.getRdate());
sheet.addCell(label);
label = new Label(2, i+1, r.getAgency_code());
sheet.addCell(label);
label = new Label(3, i+1, r.getAgency_name());
sheet.addCell(label);
label = new Label(4, i+1, tradeType);
sheet.addCell(label);
label = new Label(5, i+1, status);
sheet.addCell(label);
label = new Label(6, i+1, ""+r.getTotal_amount());
sheet.addCell(label);
label = new Label(7, i+1, ""+r.getTotal_count());
sheet.addCell(label);
wwb.write() ;
wwb.close() ;
os.close();
flag = true;
catch (Exception e)
flag= false;
PrintWriter out = response.getWriter();
System.out.println("-------------------flag="+flag);
if(true == flag)
out.write("succ");
else
out.write("error");
return null;
html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table>
......
</table>
</body>
</html>
你试试,我没环境不好测试,希望有用。追问
我试了一下 可并没有用 还有什么原因么?
追答给你找了一个链接,供参考:
http://blog.csdn.net/cmtobby/article/details/1508647
不弹出的可能基本上就是出异常了啊..
wwb.write() 不太记得了..
我还用过这种办法去导出.
response.getOutputStream().write(file.getBytes());
但是按理来说...wwb.write() 应该是没问题的
所以我觉得可能是导出过程出异常了..追问
后台并没有报错 没有异常 会是什么原因呢?
追答你的flag 变量 值是多少? 看日志 ..
追问-------------------flag=true
哎呀 这是什么原因呢?
你这样..用我这段先试试是不是浏览器问题:
OutputStream os;
try
os = response.getOutputStream();
response.setContentType("application/msexcel;charset=UTF-8");// 定义输出类型
response.reset();// 清除缓冲中的数据
response.setHeader("Content-disposition",
"attachment; filename=fine.xls");// 设定输出文件头
response.flushBuffer();// 将缓冲区中的所有数据发送到客户端
// File outFile = new File("D:" + File.separator +
// "代理商日交易情况统计表.xls");
// OutputStream os = new FileOutputStream(outFile);
// 创建Excel工作薄
WritableWorkbook wwb = Workbook.createWorkbook(os);
String[] title = "编码", "统计日期", "代理商编码", "代理商名称", "交易类型", "交易状态",
"累计金额", "累计笔数" ;
String exportName = "代理商日交易情况统计";
WritableSheet sheet = wwb.createSheet(exportName, 0);
Label label;
for (int i = 0; i < title.length; i++) // Label(x,y,z)
// 代表单元格的第x+1列,第y+1行,
// 内容z //
// 在Label对象的子对象中指明单元格的位置和内容
label = new Label(i, 0, title[i]); // 将定义好的单元格添加到工作表中
sheet.addCell(label);
sheet.setColumnView(2, 17);
sheet.setColumnView(3, 10);
int i = 0;
label = new Label(0, i + 1, "aaa");// 添加运营商
sheet.addCell(label);
label = new Label(1, i + 1, "bbb");
sheet.addCell(label);
label = new Label(2, i + 1, "ccc");
sheet.addCell(label);
label = new Label(3, i + 1, "ddd");
sheet.addCell(label);
label = new Label(4, i + 1, "eee");
sheet.addCell(label);
label = new Label(5, i + 1, "fff");
sheet.addCell(label);
label = new Label(6, i + 1, "ggg");
sheet.addCell(label);
label = new Label(7, i + 1, "hhh");
sheet.addCell(label);
wwb.write();
wwb.close();
os.close();
catch (Exception e)
boolean flag = true;
PrintWriter out = null;
try
out = response.getWriter();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
用你的程序也没有显示 可能是浏览器的问题 我用的是ie9,不过用火狐,和360也一样没有 不知道是不是页面需要设置什么 谢谢你 当误了你那么久
追答没关系.因为我写过导出功能.有点印象,只是顺便帮你一起看看.你要不换个浏览器试试..
本回答被提问者采纳以上是关于jsp调用java方法导出excel为啥会弹出保存或下载的对话框,调用完之后直接将文件保存到指定路径下即可。的主要内容,如果未能解决你的问题,请参考以下文章