2009-03-20 9 views
2

Nous utilisons un petit peu d'exporter du code Excel dans notre code d'application au travail pour des contrôles d'exportation XML à partir de nos pages ASP dans un format Excel utilisant le code suivant:Excel Exporter dans ASP.NET + VB.NET Bug

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 

Tout va bien, sauf que nous avons rencontré un bug plutôt frustrant. Si le contrôle XML contient un lien, le code d'exportation est appelé à nouveau. Nous avons un bouton qui dira "Exporter vers Excel" de la page .aspx qui appelle simplement ExcelExport.Export(Xml1, "MyFileName") qui est dans un événement de clic LinkButton.

est ici l'ordre des événements en fonction de la forme soumettre (filtres sélection)

  • Entrez les filtres
  • Envoyer un formulaire
  • Page_Load se
  • bouton Soumettre événement click se produit

Cliquer sur le bouton d'exportation

  • Page_Load
  • bouton lien Exporter clic événement

jours heureux jusqu'à présent, mais tout de suite après l'événement précédent, voici ce qui se passe lorsque vous cliquez sur un lien hypertexte dans le contrôle XML (XSLT rendu Page)

  • Page_Load
  • bouton Exporter lien cliquez événement

Ainsi, l'utilisateur soumet un formulaire qui charge le contrôle XML dans une belle page XSLT visible. Ensuite, ils cliquent sur "exporter vers Excel" qui leur donnera la page en excel à la place, puis ils cliquent sur la page XSLT, par exemple un lien, mais la boîte de dialogue de sauvegarde pour Excel revient à nouveau. Nous avons traversé la série d'événements, et si nous n'appelons pas l'exportateur Excel, il passe par la série d'événements comme d'habitude. Si nous appelons l'exportateur Excel, il passera par l'événement de chargement de la page et, de manière inattendue, ira dans l'événement de clic sur le bouton de lien.

Nous avons essayé tout ce que nous pouvions penser pour essayer de résoudre ce bug sans aucun problème. Des idées sur la raison pour laquelle cela se passe?

Répondre

-1

Vous pouvez exporter vos données au format .csv. Vous pouvez exporter vos données comme suit:

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() 
Questions connexes