【问题标题】:how to export data from gridview to excel 2003,2007,2010 without warning message如何将数据从gridview导出到excel 2003,2007,2010没有警告消息
【发布时间】:2014-09-02 07:17:01
【问题描述】:

我正在尝试将数据从 gridview 导出到 excel。我的电脑上安装了office 2010。当我尝试打开 excel 文件时,它给了我错误,即“您尝试打开的文件的格式与文件扩展名 c# 指定的格式不同”。

我的网格视图导出代码:

Protected Sub btnexptoexcel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnexptoexcel.Click
    Try
        Response.Clear()
        Response.Buffer = True
        Response.AddHeader("content-disposition", "attachment;filename=Complaint_Details.xls")
        Response.Charset = ""
        Response.ContentType = "application/ms-excel"
        Using sw As New StringWriter()
            Dim hw As New HtmlTextWriter(sw)

            grd_ComplaintDetails.AllowPaging = False


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

            grd_ComplaintDetails.RenderControl(hw)
            Dim style As String = "<style> .textmode { } </style>"
            Response.Write(style)
            Response.Output.Write(sw.ToString())
            Response.Flush()
            Response.[End]()
        End Using

    Catch ex As Exception
        div_Msg.InnerText = "Can not generate Excel File"
    End Try

End Sub

我的问题是当我打开文件时(在 MSOffice 2003、2007 或 2010 中)它不应该给我文件扩展名错误... 你能告诉我我应该对代码进行哪些更改吗???

【问题讨论】:

    标签: asp.net vb.net excel gridview


    【解决方案1】:

    来自微软的Article 说 Excel 使用以下扩展:

    • .xls – 是 Excel 97 - Excel 2003 二进制文件格式 (BIFF8)。
    • .xlsx – 默认的 Office Excel 2007 基于 XML 的文件格式。无法存储 Microsoft Visual Basic for Applications (VBA) 宏代码或 Microsoft Office Excel 4.0 宏表 (.xlm)。
    • .xlt – Excel 97 - Excel 2003 二进制文件格式 (BIFF8),用于 Excel 模板。
    • .xlsm Office Excel 2007 基于 XML 和启用宏的文件格式。存储 VBA 宏代码或 Excel 4.0 宏表 (.xlm)。
    • .xltx Excel 模板的默认 Office Excel 2007 文件格式。无法存储 VBA 宏代码或 Excel 4.0 宏表 (.xlm)。
    • .xla Excel 97-2003 加载项,一个旨在运行附加代码的补充程序。支持使用 VBA 项目。

    您的偏好是 MSOffice 2003、2007 或 2010

    所以你必须选择

    Response.AddHeader("content-disposition", "attachment;filename=Complaint_Details.xlsx") 代替 Complaint_Details.xls"

    【讨论】:

    • 感谢您的回复...我根据您的评论替换了我的代码,但它给了我错误,即“excel无法打开文件,因为文件格式无效。”..你能帮帮我吗??
    【解决方案2】:

    如果可以,请尝试将文件另存为 .xlsx (excel 2007+)

    Response.AddHeader("content-disposition", "attachment;filename=Complaint_Details.xlsx")
    

    另外,我建议尝试使用这个免费库来处理xlsx Excel 文件。 EPPLUS 非常好。 epplus.codeplex.com

    如果您特别需要 xls 文件(excel 2003 和更早版本),EPPLUS 不支持它们,但您可以使用这个其他库 NPOI https://npoi.codeplex.com/支持他们

    【讨论】:

    • 感谢您的回复...我根据您的评论替换了我的代码,但它给了我错误,即“excel无法打开文件,因为文件格式无效。”..你能帮帮我吗??
    • @KishorRajendraKulkarni 我不能,我不知道你在做什么......我建议使用 EPPLUS 重写你的整个程序并创建一个 valid xlsx提供的示例项目之后的文件。
    【解决方案3】:

    我也遇到了同样的问题。我终于用记事本打开了 RenderControl 输出的内容,发现它实际上是一个网页,不管扩展名是什么。这就是您收到警告消息的原因。用户实际上必须从 Excel 中保存为 Excel 文件。

    另一个缺点是网格中的内容也会呈现所有代码。因此,列标题将链接回 doPostBack 函数,并且超链接仍然会有无效的引用。

    这种方法我已经看过很多次了,但它并不是一个完美的解决方案。

    【讨论】:

      猜你喜欢
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 2016-07-10
      相关资源
      最近更新 更多