加上onbeforeunload后,汇出的Excel档变成无法打开?

b7307024 2020-07-03 02:24:37
各位前辈好,请帮帮小弟,这程序原本快完成了,却卡在这个地方。

这个程序主要是抓取数据后导出Excel文件,然后显示下载链接提供下载,按下网页中的关闭按钮会删除SERVER上的Excel文件并关闭,但考量到用户可能按下右上角的叉叉,所以在body加上onbeforeunload去触发按下右上角叉叉后,也要删除汇出的Excel档。

但问题来了,加上onbeforeunload后,汇出的excel就无法打开了,

且导出的网页还会显示错误消息


程式碼如下:

<!--#include file="func\func.asp" -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<title>xxx明细表导出</title>
</head>
<script type="text/javascript">
function closeEvent(FileStr)
{
location.href = "/test/filedel.asp?delpath="+FileStr;
}

function fileDelete(FileStr){

location.href = "/test/filedel.asp?delpath="+FileStr;
window.close();
}
</script>
<%
Dim location

date1 = Format_Time(Request("date1"),2)
date2 = Format_Time(Request("date2"),2)

If date1 = date2 Then
tablename = date1&"xxx明细表"
Else
tablename = date1&"~"&date2&"xxx明细表"
End If

FileStr = "/test/xls/"&tablename&".xlsx"
%>
<body onbeforeunload="closeEvent('<%=FileStr%>')">
<%
Set rs = Server.CreateObject("Adodb.Recordset")

sql = "SELECT * "
sql = sql + "FROM templetable "
sql = sql + "WHERE ACCOUNTDATE BETWEEN '"&date1&"' AND '"&date2&"' "
rs.Open sql,Sql05Conn,1,1
title = Array("aaa","bbb","ccc","ddd","eee")

Set xlApp = Server.CreateObject("Excel.Application")
Set xlWb = xlApp.Workbooks.Add
'xlApp.Visible = True '是否显示exce程序
xlApp.DisplayAlerts = False '关闭覆盖询问的对话框

Set xlWs = xlWb.Worksheets(1)
xlWs.Activate

For i=0 to UBound(title)
xlWs.cells(1,i+1).value = title(i)
xlWs.cells(1,i+1).Interior.colorindex = 15 '设置字段背景颜色
'xlWs.cells(1,i+1).horizontalalignment = 3 '列位置中
Next

xlWs.select
xlWs.Name = tablename
xlWs.Range("A2").CopyFromRecordset rs '从A2贴上,因A1要放字段名
xlWs.range("A:Z").font.size = 10 '设置字体大小
xlWs.Range("A:Z").Columns.AutoFit '自动调整栏宽
xlWb.worksheets(tablename).Select

location = Server.MapPath ("/test/xls/"&tablename&".xlsx")

xlApp.ActiveWorkbook.Saveas location '保存文件
xlApp.ActiveWorkbook.Close
xlApp.Application.Quit


rs.close
Set rs = Nothing
Sql05Conn.close
Set Sql05Conn = Nothing
%>
<a href="<%=FileStr%>">点我下载Excel档</a>
<br><br>
<input type="button" name="close" value="关闭" onClick="fileDelete('<%=FileStr%>')">
</body>
</html>


请问这问题该怎么解决呢? 或者是有其他建议的方法,我也可以修改,拜托各位前辈大大了,感激不尽!
...全文
15535 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
b7307024 2020-08-20
  • 打赏
  • 举报
回复
在这边留一下我后来的解决方法 我将上述locaton的位置改为共用资料夹export,然后登入时在export建立使用者暂存资料夹 只要使用者登出或Session.Timeout就会删除此资料夹,也就一并删除汇出的excel档。 相关连接如下: Global.asa 如何获取SESSION变量值,以便登入后,可以建立用户文件夹?
b7307024 2020-07-08
  • 打赏
  • 举报
回复
感谢您的回复,您说的代码是如下的语法吗?

Response.AddHeader "Content-Disposition","attachment;filename="&tablename&".xls"
Response.ContentType="application/vnd.ms-excel"
这样是可以汇出Excel档,但是有缺点,有时候直接开启会打不开,要下载才可以打开 然后又会有开启慢的问题,所以才会使用Excel.Application的方式。 谢谢!
chinaskysun 2020-07-03
  • 打赏
  • 举报
回复
要按照你说的,应该是这样的,首先在服务端生成一个excel文档,然后建立一个asp页面,设定header为excel的类型,然后用Stream把excel的文件输出出来,输出完毕后删除生成的那个excel文档。 asp好久没用过了,都忘记完了,就这样肯定没错,你找找资料吧

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧