从Internet打开excel文件会打开一个空白的Excel窗口

时间:2016-07-19 15:51:17

标签: asp.net vb.net excel intranet

最近,新的Windows更新破坏了将GridView转储到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中的组策略/设置/用户配置。

7 个答案:

答案 0 :(得分:8)

解决方案1 ​​

1)打开Excel转到文件选项

2)点击信任中心 - &gt;信任中心设置

3)转到受保护的视图。有3个选项显示全部被点击。取消选中第一个选项 - “为来自Internet的文件启用受保护的视图”。在下面的评论中报告的某些情况下,第1和第2选项都需要取消选中(谢谢@mosheb)

解决方案2

卸载这些Windows更新:

  • Windows Update KB3115262(Excel 2013)
  • Windows Update KB3115130(Excel 2010)

答案 1 :(得分:3)

解决方案3

  • 进入文件属性(R点击 - 属性)
  • 点击“取消屏蔽”
  • 点击“应用”

答案 2 :(得分:3)

不幸的是,

更改安全选项不是一个选项,但事实证明,如果您导出到CSV而不是XLS,那么该文件将在Excel中打开而忽略信任中心的内容。

我们使用的是经典ASP,因此我们将页面从导出HTML表格格式更改为CSV格式,并将标题和内容类型更改为:

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

并使用:Response.Write (chr(10))

进行换行

答案 3 :(得分:2)

尝试执行以下操作:

替换“附件”
Response.AddHeader("content-disposition","attachment;filename=GridViewExport.xls")

使用“内联”

Response.AddHeader("content-disposition","inline;filename=GridViewExport.xls")

这可能会有所帮助!

Content-Disposition:What are the differences between "inline" and "attachment"?

答案 4 :(得分:1)

我想我会提到第三种解决方案:

将生成.xls的网站添加到“可信站点”列表中。我不得不通过GPO添加十几个网站,因为我们的CIO拒绝回滚KB ... =(

答案 5 :(得分:1)

Raniel66's suggestion,即使将站点添加到受信任的站点列表后,如果excel仍显示为空白,则您可以尝试/建议以下解决方法。

打开excel工作簿,即使它是灰色/空白,然后单击excel中的“ 查看”标签,然后单击“全屏/最大化屏幕图标”,如下面的屏幕截图所示。这就是对我有用的。

enter image description here

答案 6 :(得分:-1)

有同样的问题。更新阻止了此导出为ex​​cel活动,并且并非所有全球用户都有权取消阻止。它会影响2010年和2013年.xls。我认为它解决了内容类型。您是否尝试将内容类型从application / vnd.ms-excel切换到application / vnd.openxmlformats-officedocument.spreadsheetml.sheet并使用xlsx?