2009-07-28 81 views
3

我試圖導出一個記錄集到Excel中,但它似乎在生產服務器上保持失敗。但是,它似乎在我的開發工作站上工作得很好。我想知道我適合的服務器相關的問題,但我有其他的應用程序,可以使用相同的確切代碼,良好的類似代碼相同的設置導出很好。從傳統的ASP導出數據到excel文件失敗

<%@ Language=VBScript %> 
<%Response.expires = -1%> 
<%response.buffer = true%> 
<% 
    Dim today 
    today = "_" + Replace(Date,"/","") + "_" + Replace(Time(),":", "") 

    Response.Charset = "ANSI" 
    Response.ContentType = "application/octet-stream" 
    Response.ContentType = "application/vnd.ms-excel" 
    Response.AddHeader "Content-Disposition", "attachment; filename=List" + today + ".xls" 
    Response.ContentType = "application/download" 

    set Cnn = server.CreateObject("ADODB.connection") 
    Cnn.ConnectionString = Application("Cnn_ConnectionString") 
    Cnn.open  

    set rs1 = server.CreateObject("ADODB.Recordset") 
    SQLCollections = "Sp_MysProc @Param1=" & Session("var1") 
    rs1.open SQLCollections,cnn 
%> 
<html> 
    <body> 
     <table> 
      <tr> 
       <td>Number</td> 
       <td>Name</td> 
      </tr> 
     <%if not rs.eof then 
      do while not rs.eof %> 
      <tr> 
       <td><%=rs("Number") %></td> 
       <td><%=rs("Name") %></td> 
      </tr> 
     <% 
      rs.MoveNext 
      Loop 
      rs.Close 
      set rs = Nothing 
     End if   
     %> 
     </table> 
    </body> 
</html> 

再次,這從我的機器工作。但是,當我從生產做它給了我下面的消息:

Internet Explorer無法下載從www.mydomain.com

MyFile.asp的Internet Explorer無法打開 本網站。請求的站點 要麼不可用,要麼不能找到 。請稍後再試。

超出錯誤是否有任何方法可以使其導出並不顯示爲帶有白色背景且不帶線條的HTML,即像真正的Excel文件那樣?

編輯: 內容類型已根據Anthony的答案進行了更正。

日期不是硬編碼,以允許每天創建多個文件,無需任何用戶干預(用戶請求)。

我已更新刪除If Not EOF。我一直注意到很多長時間運行的連接,也許圍繞着這個應用程序有許多這類問題。謝謝你的提示。此外,它仍然工作desipte沒有記錄集是按要求。

編輯2 我固定在EOF問題與不正確的列名(哎呀!),它現在可以正確下載從生產我的電腦上。我有Office 2007,但至少還有一臺電腦不能下載。這臺其他電腦上有Office 2000。但是刪除標題並允許它在所有機器上工作的HTML都可以使用。

Office 2000可能會遇到這種問題嗎?

+1

它顯示任何記錄(在生產中),如果您刪除contenttype和處置相關的標頭? – shahkalpesh 2009-07-28 20:04:22

+0

在瀏覽器上的頁面上查看源代碼,並在此處發帖,瞭解它的內容。 – shahkalpesh 2009-07-28 21:27:34

回答

1

首先是幾件管家用品。

對於Content-Type 3次設置沒什麼意義。只要堅持用'應用程序\ vnd.ms-EXCEL」之一。

而不是使用‘ANSI’作爲字符集的‘Windows 1252’。

多大輸出?既然你是緩衝。你可能會擊中ASP緩存默認最大IIS6的4MB的

或者關閉緩衝或彈出到元數據庫編輯器,並增加對應用程序的AspBufferingLimit的價值

編輯

我想嘗試的下一件事是在我的客戶端上安裝Fiddler並嘗試下載。當您嘗試下載文件時,您在小提琴手中看到了什麼?

你安裝了什麼版本的MS Office?

today = "_" + Replace(Date,"/","") + "_" + Replace(Time(),":", "") 

...這是服務器上的區域設置非常敏感:當我看到

+0

有一些相當大的文件的機會,但我會推測沒有比1或2 MB更大的東西。我還用不同的字符集更新了它,並刪除了不需要的內容類型。雖然仍然是一個問題。 – 2009-07-28 20:29:24

0

在我的脖子出來的毛髮上升。它可能是一臺服務器有美國日期格式,另一臺服務器有不同的日期格式?

如果出錯了,最終可能會導致無效的文件名。

0

如果您的輸出僅用於導出(指向excel),則不需要放置HTML和BODY標籤。你可以放心只寫<table>...</table>

0

只需使用以下代碼禁用代碼中的緩衝。

Response.Buffer = False