Pb export excel depuis une page aspx (vb)

Signaler
Messages postés
12
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
24 octobre 2007
-
Messages postés
12
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
24 octobre 2007
-
Bonjour à tous,

J'ai un problème lors d'un export de donnée vers excel, dans le fichier créé
dynamiquement se trouve la copie conforme de mon affichage HTML mais pas les
données que je souhaite.

D'où vient le problème ?

Voici mon code :



Private 
Sub btnExporter_Click(
ByVal sender 
As System.Object, 
ByVal e 
As System.EventArgs) 
Handles btnExporter.Click



Try
   Dim mDataGridSalesItem 
As DataGridItem

   Dim chkExport 
As CheckBox

   Dim mCODECD 
As 
String
   Dim count 
As 
Integer =  0

   Dim item 
As DataGridItem

   Dim sbrHTML 
As System.Text.StringBuilder = 
New System.Text.StringBuilder



   ' Vérification du nombre d'enregistrement a exporter
   For 
Each item 
In DataGridSales.Items
      DetermineSelection(item, count)

   Next


   sbrHTML.Append("\")
sbrHTML.Append(\"----
<center>Ventes - Export des CODECD du " + 
Date.Today.ToLongDateString.ToString + "
</center>, \")
sbrHTML.Append(\"----
 CODECD  |Description produit |Fournisseur(s) 1 |Fournisseur(s) 2 |PPUB |PPUB Min. |PPUB Max. |Ecart Type |Quantit&#233; |Nombre de pharmacie(s) |WeekCode |\")

   If count > 0 
Then
      For 
Each mDataGridSalesItem 
In DataGridSales.Items
chkExport  = mDataGridSalesItem.FindControl(\"chkSel\")

         If chkExport.Checked 
Then
            Try
               Dim mConn 
As 
New SqlConnection(strConnect)
mConn.Open()

               Dim mCmd 
As 
New SqlCommand(\"SELECT * FROM CODE_SALES_CSA WHERE CSA_CODECD = '\" + 
CType(mDataGridSalesItem.FindControl(\"hyperlinkCODECD\"), HyperLink).Text + \"'\", mConn)

               Dim mDr 
As SqlDataReader = mCmd.ExecuteReader()

               While mDr.Read()

sbrHTML.Append(\"----
\")

                     If 
Not IsDBNull(mDr.Item(\"CSA_CODECD\")) 
Then
sbrHTML.Append(\"" + mDr.Item("CSA_CODECD").ToString() + ", \")

                     Else
                        sbrHTML.Append(\", \")

                     End 
If
                     If 
Not IsDBNull(mDr.Item(\"CSA_PRDDESC\")) 
Then
                        sbrHTML.Append(\"" + mDr.Item("CSA_PRDDESC").ToString() + ", \")

                     Else
                        sbrHTML.Append(\", \")

                     End 
If
                     If 
Not IsDBNull(mDr.Item(\"CSA_PSUP\")) 
Then
                        sbrHTML.Append(\"" + mDr.Item("CSA_PSUP").ToString() + ", \")

                     Else
                        sbrHTML.Append(\", \")

                     End 
If
                     If 
Not IsDBNull(mDr.Item(\"CSA_SSUP\")) 
Then
                        sbrHTML.Append(\"" + mDr.Item("CSA_SSUP").ToString() + ", \")

                     Else
                        sbrHTML.Append(\", \")

                     End 
If
                     If 
Not IsDBNull(mDr.Item(\"CSA_AVG_PRICE\")) 
Then
                        sbrHTML.Append(\"" + FormatNumber(mDr.Item("CSA_AVG_PRICE"), 2) + " &amp;euro;, \")

                     Else
                        sbrHTML.Append(\", \")

                     End 
If
                     If 
Not IsDBNull(mDr.Item(\"CSA_MIN_PRICE\")) 
Then
                        sbrHTML.Append(\"" + FormatNumber(mDr.Item("CSA_MIN_PRICE"), 2) + " &amp;euro;, \")

                     Else
                        sbrHTML.Append(\", \")

                     End 
If
                     If 
Not IsDBNull(mDr.Item(\"CSA_MAX_PRICE\")) 
Then
                        sbrHTML.Append(\"" + FormatNumber(mDr.Item("CSA_MAX_PRICE"), 2) + " &amp;euro;, \")

                     Else
                        sbrHTML.Append(\", \")

                     End 
If
                     If 
Not IsDBNull(mDr.Item(\"CSA_STDEV_PRICE\")) 
Then
                        sbrHTML.Append(\"" + FormatNumber(mDr.Item("CSA_STDEV_PRICE"), 2)  " &amp;euro;, \")

                     Else
                        sbrHTML.Append(\", \")

                     End 
If
                     If 
Not IsDBNull(mDr.Item(\"CSA_SUM_QTY\")) 
Then
                        sbrHTML.Append(\"" + Format(mDr.Item("CSA_SUM_QTY"), "# ##0").ToString() + ", \")

                     Else
                        sbrHTML.Append(\", \")

                     End 
If
                     If 
Not IsDBNull(mDr.Item(\"CSA_COUNT_PHARCD\")) 
Then
                        sbrHTML.Append(\"" + Format(mDr.Item("CSA_COUNT_PHARCD"), "# ##0").ToString() + ", \")

                     Else
                        sbrHTML.Append(\", \")

                     End 
If
                     If 
Not IsDBNull(mDr.Item(\"CSA_WEEKCD\")) 
Then
                        sbrHTML.Append(\"" + mDr.Item("CSA_WEEKCD").ToString() + ", \")

Else
                        sbrHTML.Append(\", \")

                     End 
If

sbrHTML.Append(\"\")

               End 
While

mDr.Close()
mConn.Close()

         Catch ex 
As Exception
TitreInfoText.Text = \"Une erreur est survenue\"
MessageInfoText.Text = \" Message :  \" &amp; ex.Message &amp; \"
\"
MessageInfoText.Text &amp; = \"Source : \" &amp; ex.Source &amp; \"
\"
MessageInfoText.Text &amp;=  \" D&#233;tail :  \" &amp; ex.StackTrace
PanelInfo.Visible  = 
True
         End 
Try
        End 
If
   Next
End 
If

sbrHTML.Append("
")



Dim myFileName 
As 
String =  "ReportSales" + Microsoft.VisualBasic.Replace(
Date.Today.ToShortDateString, "/", "_") + ".xls"



Dim swXLS 
As StreamWriter = 
New StreamWriter(Server.MapPath("\UnknownManagement\IHM\Export\Report") + myFileName, 
False, System.Text.Encoding.Unicode)


swXLS.Write(sbrHTML.ToString())


swXLS.Close()


Response.Clear()
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader("Content-Disposition", "attachment; filename=" + myFileName)



'Retourner le rapport &#224; l'utilisateur
Response.WriteFile(myFileName)



Catch ex 
As Exception
   TitreInfoText.Text = "Une erreur est survenue"
   MessageInfoText.Text = " Message :  " &amp; ex.Message &amp; "
"
   MessageInfoText.Text &amp; = "Source : " &amp; ex.Source &amp; "
"
   MessageInfoText.Text &amp;=  " D&#233;tail :  " &amp; ex.StackTrace
   PanelInfo.Visible  = 
True
End 
Try



End 
Sub


D'ou vient le problème ?

Merci par avance

Thibault

8 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Et si tu envoies tes données directement dans le flux HTML au lieu du flux de excel ? en gros un response.write(sbrHTML) en enlevant tout le reste (si j'ai bien compris le code)



ca donne quoi ?



t'as fait un point d' arret la ou t'as un problème ?


<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
12
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
24 octobre 2007

Quand je fais un response.write(sbrHTML), il m'affiche un tableau avec les données de mon export au dessus de mon datagrid dans ma page.

En fait je n'ai aucune erreur qui apparait donc pas facile pour comprendre pourquoi lorsque je lui demande de m'afficher mon fichier dans excel, il m'ouvre le fichier dans excel avec mon flux html dedans ...
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
et c'est pas ce que tu veux ? car la ton code il te met le flux html
avec le contentype de Excel, donc en gros Excel ouvre un fichier HTML,
et je n'en vois pas l interet....



c'est quoi le problème ?

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
12
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
24 octobre 2007

j'aimerais que excel m'ouvre le fichier xls créé par le streamwriter.

A cette ligne "Dim swXLS
As StreamWriter =
New StreamWriter(Server.MapPath("\UnknownManagement\IHM\Export\Report") + myFileName,
False, System.Text.Encoding.Unicode)"

je crée un nouveau fichier nommé toto.xls.

Quand je vais double-cliquer sur le fichier via l'explorateur windows, il m'ouvre correctement le fichier dans excel.

Comment faire pour qu'il me fasse la même chose depuis l'application ?
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
t'arrives à enregistrer un fichier excel sur ton disque ? a mon avis avec ta méthode c'est deja pas bon : utilises VSTO ...



Pourquoi dans ce cas utilises tu asp.net ? une fois que ton fichier est
créer, une fois que le fichier est créer, tu ne peux pas faire ouvrir
excel comme ca, au pire tu vas lancer Excel dans IE ... c'est ce que tu
as l'air de faire, sans le vouloir :p

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
12
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
24 octobre 2007

Oui j'arrive a enregistré un fichier excel sur mon disque. Si j'utilise cette méthode c'est tout simplement pour un gain de temps.
Au départ j'utilisais l'interop avec les Office PIA mais ça met énormément de temps alors qu'en faisant comme je fais maintenant c'est pratiquement instantané !!!

C'est quoi VSTO ??????
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Visual Studio tools for Office ... fais un peu de recherche sur le net tu trouveras quelque trop rare exemples :(



Par contre il y a un tour office organisé par Ms pour les decouvrir,
j'y suis allé à lyon, c'etait excellent. plus d'info sur les sites de
Ms :p

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
12
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
24 octobre 2007

Merci pour l'info !!! J'ai effectué quelques modifications sur mon code et là ça fonctionne bien pour les utilisateurs qui sont en windows XP et office 2003 ainsi que sur mon serveur de prod (windows 2000 server).

Par contre ça ne fonctionne pas pour les utilisateurs qui sont en windows 2000 pro avec offcie 2000 et XP...

Connaitrais tu la réponse à ce problème ?