代码之家  ›  专栏  ›  技术社区  ›  Kieran Senior

asp.net+vb.net中的excel导出错误

  •  2
  • Kieran Senior  · 技术社区  · 16 年前

    我们在应用程序代码中使用一小部分Excel导出代码,使用以下代码将XML控件从ASP页导出为Excel格式:

      Public Shared Sub Export(ByRef xml As Xml, ByVal filename As String)
        Dim response As HttpResponse = HttpContext.Current.Response()
        response.Clear()
        response.AddHeader("content-disposition", "attachment;filename=" & filename & ".xls")
        response.ContentType = "application/vnd.ms-excel"
        Dim s As System.IO.StringWriter = New System.IO.StringWriter
        Dim htw As HtmlTextWriter = New HtmlTextWriter(s)
        xml.RenderControl(htw)
        response.Write(s.ToString)
        response.End()
      End Sub
    

    这一切都很好,只是我们遇到了一个相当令人沮丧的错误。如果XML控件中有链接,则再次调用导出代码。我们有一个按钮,从.aspx页面中显示“导出到excel”,该页面只需调用 ExcelExport.Export(Xml1, "MyFileName") 在一个 LinkButton 单击事件。

    以下是基于表单提交(选择筛选器)的事件顺序

    • 输入筛选器
    • 提交表单
    • 出现页面加载
    • 发生提交按钮单击事件

    单击导出按钮

    • 页负荷
    • 导出链接按钮单击事件

    到目前为止过得很愉快,但在上一个事件之后,当您单击XML控件(呈现的xslt页面)中的超链接时,就会发生这种情况。

    • 页负荷
    • 导出链接按钮单击事件

    因此,用户提交一个表单,该表单在一个可查看的xslt页面中加载xml控件。然后他们单击“导出到excel”,这将给他们提供excel中的页面,然后他们单击xslt页面,例如一个链接,但是excel的保存对话框再次出现。我们经历了一系列的事件,如果我们不调用excel导出器,它会像正常一样经历一系列的事件。如果我们调用excel导出器,它将经历页面加载事件,并意外进入链接按钮单击事件。

    我们已经想尽一切办法试图解决这个错误,但没有任何运气。你知道为什么会这样吗?

    1 回复  |  直到 16 年前
        1
  •  -1
  •   emdadgar2    16 年前

    您可以将数据导出为.csv文件格式。您可以这样导出数据:

    response.Clear()
    
    response.AddHeader("content-disposition", "attachment;filename=" & filename & ".csv")
    
    response.write "1,""John"",""Smith"",1976"+vbcrlf
    response.write "2,""Joe"",""Black"",1963"+vbcrlf
    response.write "1,""Morgan"",""Smith"",2003"+vbcrlf
    
    response.End()