2016-07-19 116 views
6

將GridView轉儲到Excel文件從Internet上下載/打開的方法最近被新的Windows更新中斷。從互聯網上打開excel文件打開一個空白excel窗口

我的代碼使用StringWriter,HTMLTextWriter和RenderControl從GridView轉儲到XLS文件。從http://www.aspsnippets.com/Articles/Export-GridView-to-Excel-in-ASPNet-with-Formatting-using-C-and-VBNet.aspx

Protected Sub ExportToExcel(sender As Object, e As EventArgs) 
    Response.Clear() 
    Response.Buffer = True 
    Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls") 
    Response.Charset = "" 
    Response.ContentType = "application/vnd.ms-excel" 
    Using sw As New StringWriter() 
     Dim hw As New HtmlTextWriter(sw) 

     'To Export all pages 
     GridView1.AllowPaging = False 
     Me.BindGrid() 

     GridView1.HeaderRow.BackColor = Color.White 
     For Each cell As TableCell In GridView1.HeaderRow.Cells 
      cell.BackColor = GridView1.HeaderStyle.BackColor 
     Next 
     For Each row As GridViewRow In GridView1.Rows 
      row.BackColor = Color.White 
      For Each cell As TableCell In row.Cells 
       If row.RowIndex Mod 2 = 0 Then 
        cell.BackColor = GridView1.AlternatingRowStyle.BackColor 
       Else 
        cell.BackColor = GridView1.RowStyle.BackColor 
       End If 
       cell.CssClass = "textmode" 
      Next 
     Next 

     GridView1.RenderControl(hw) 
     'style to format numbers to string 
     Dim style As String = "<style> .textmode { } </style>" 
     Response.Write(style) 
     Response.Output.Write(sw.ToString()) 
     Response.Flush() 
     Response.[End]() 
    End Using 
End Sub 

Public Overrides Sub VerifyRenderingInServerForm(control As Control) 
    ' Verifies that the control is rendered 
End Sub 

Excel中(2013年)使用下面的代碼的常用方法將打開一個空白窗口,沒有警告或消息,爲什麼任何被封鎖,並沒有選擇接受要打開的文件。

我的代碼在Intranet站點上運行,我可以訪問Windows中的組策略/設置/用戶配置。

回答

8

解決方案1 ​​

1)打開Excel轉到文件選項

2)單擊信任中心 - >信任中心設置

3)進入受保護的視圖。有3個選項顯示所有點擊。取消選中第一個選項 - 「爲來自Internet的文件啓用受保護的視圖」。在報道中都低於第1和第2方案的意見有些情況下需要取消選中(感謝@mosheb)

解決方案2

卸載這些Windows更新:

  • Windows更新KB3115262 (EXCEL 2013)
  • Windows更新KB3115130(Excel 2010中)
+1

這隻能由用戶在管道的另一端被應用,而不是人人都願意採取這種方式。對我而言,這是一種解決方法,而不是解決方案。 – Paul

+0

@Paul老實說,我發現的唯一真正的解決方案是不再使用這塊代碼。如果任何人都可以改變這個代碼並使其工作,我會接受該答案。 –

+0

@paul我將此作爲Q/A風格提交以回答我自己的問題以分享我的知識。我編輯了這個問題,目的是爲了更好地描述我的情況以及我在用戶和Intranet環境中運行的代碼的訪問類型。這對我來說是一個解決方案。 –

3

解決方案3

  • 將進入文件的屬性(R點擊 - 屬性)
  • 點擊 '解除阻止'
  • 點擊 '應用'
+0

與可接受的解決方案一樣,這隻能由用戶在管道的請求端應用。我不認爲這是一個解決方案。 – Paul

3

改變安全選項是不幸的是沒有一個選項,但事實證明,如果您導出爲CSV而不是XLS,則該文件將在Excel中打開,而忽略信任中心的內容。

我們在傳統的ASP,所以我們從導出HTML表格式CSV更改頁面,並改變了我們的頭和CONTENTTYPE這樣:

Response.AddHeader "content-disposition", "attachment; filename=search_results.csv" 
Response.ContentType = "text/csv" 

,做符合突破:Response.Write (chr(10))

+1

問題中的代碼確實應用了一些格式(設置背景顏色),但是對於您的要求以及其他許多方面,這也是一個很好的解決方案。我相信我有幾個地方可以應用這個(我們的公司以外的公司,我們不能只卸載Windows更新等)謝謝! –

+1

你是如何改變你的頁面輸出到.csv的?作爲測試,我使用了由我的網站輸出的.xls文件,將其複製並重命名爲「.csv」。打開它顯示所有的HTML標籤,看起來很亂。 我在尋找可能使用這種.csv格式作爲解決這個空白的Excel窗口問題的方法,當在Internet Explorer中導出時打開文檔,但我不確定如何將現有的Excel導出更改爲.csv而不是它看起來很可怕。 – clamum

+0

@clamum我認爲你是對的,只是改變內容類型輸出不作爲解決方案。我認爲這個答案中缺少了很多代碼更改。糾正我,如果我錯了。 –

1

只是想我會提到有第三種解決方案:

將生成.xls的網站添加到您的「可信站點」列表中。我不得不通過GPO添加大約十幾個網站,因爲我們的CIO拒絕回滾KB ... =(

+1

最終用戶沒有執行任何操作,正在通過組策略在整個域範圍內進行設置 – Raniel66

+0

對不起 - 是的,您說的沒錯。評論已刪除。 – Paul

-1

有同樣的問題。更新阻止了此導出爲ex​​cel活動,並且並非我所有的全球用戶都有權取消阻止。它影響2010年和2013年.xls。我認爲它解決了內容類型。你是否試過將你的Content Type從application/vnd.ms-excel切換到application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,並使用xlsx來代替?

+0

我試過了,我得到「無法讀取文件」。從excel和同樣的空白excel來。 –

+0

這不是一個真正的答案,而是一個建議,似乎有人試過這個建議,並說它不起作用。 –