2016-07-19 89 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

这不是一个真正的答案,而是一个建议,似乎有人试过这个建议,并说它不起作用。 –