iT邦幫忙

1

ASP開啟已存在的Excel檔案

  • 分享至 

  • xImage

請教各位大大,我要用asp程式開啟一個已存在的excel檔案並關閉視窗該怎麼操作?
我寫了一支查詢程式,查詢結果有一個「下載」按鈕,按下它可以開啟一個新視窗,新視窗的程式會生成一個Excel檔案,以上均已完成,現在我想直接開啟這個Excel檔案並關閉新視窗該怎麼操作?
可否應用FileSystemObject物件或是其它物件,又該如何操作呢?請指點,謝謝!

我現在都靠AI寫新的程式(不是我的領域),現在AI很厲害的
你直接貼整個程式碼給他,跟他說要變成怎樣
他都如樣丟回你希望怎樣的程式碼
你看不懂打不出來,可以截圖給AI
或者你用小畫家表達畫圖給AI看他都可以做得出來
打字不行,那就用講話方式,跟AI對話說要怎樣弄程式碼~
他都可以給你

前提是你要會測試程式碼,如果連程式碼都不知道如何測試就...-.-a
尼克 iT邦大師 1 級 ‧ 2025-12-26 15:06:56 檢舉
同意樓上,用AI可以拼湊出可以執行程式,前提示你自己要很清楚你要的是產出是什麼。
有時候我程式有Bug就懶的看,直接貼給AI幫我除錯,一下子就找到問題。
真是方便的工具。
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
Pod042A
iT邦新手 5 級 ‧ 2025-12-26 15:01:38

可以透過 HTTP Header 讓瀏覽器直接下載檔案。

<%
' 假設您的檔案路徑已經產出
Dim filePath, fileName
fileName = "Report.xlsx"
filePath = Server.MapPath("download/" & fileName)

' 1. 清除緩存並設定內容類型
Response.Clear
Response.ContentType = "application/vnd.ms-excel" ' 舊版 xls 可用 application/msexcel
Response.AddHeader "Content-Disposition", "attachment; filename=" & fileName

' 2. 使用 ADODB.Stream 讀取檔案並傳送到用戶端
Dim objStream
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1 ' adTypeBinary
objStream.LoadFromFile filePath

Response.BinaryWrite objStream.Read
objStream.Close
Set objStream = Nothing

' 3. 結束回應
Response.End
%>
sam_sune iT邦新手 5 級 ‧ 2025-12-26 15:29:04 檢舉

謝謝你的回覆,我修改程式如下:
<%
Dim filePath, fileName
fileName = "Xray_Rpt_20251225.xlsx"
filePath = "D:/Web/Report"

Response.Clear
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader "Content-Disposition", "attachment; filename=" & fileName

Dim objStream
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile filePath

Response.BinaryWrite objStream.Read
objStream.Close
Set objStream = Nothing

Response.End
%>
但是它顯示「網頁似乎發生問題,或可能已永久移至新的網址。」的錯誤訊息

Pod042A iT邦新手 5 級 ‧ 2025-12-26 18:30:31 檢舉

看到這個錯誤訊息,通常是因為 objStream.LoadFromFile 找不到檔案,或是 filePath 的格式不正確,導致 ASP 程式在中途崩潰(HTTP 500 錯誤),瀏覽器因而顯示「網頁發生問題」。

  1. 在 ASP 中,LoadFromFile 需要的是實體絕對路徑。雖然您寫了 D:/Web/Report,但漏掉了最後的反斜線與檔案名稱。
filePath = "D:\Web\Report\" & fileName

請留意 Windows 系統中,檔案路徑使用反斜線 \

  1. IIS 的執行帳號(通常是 IIS_IUSRS)必須對 D:\Web\Report 這個資料夾有 「讀取」 權限,否則 ADODB.Stream 無法讀取檔案。

我要發表回答

立即登入回答