Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb export excel depuis une page aspx (vb)

1 réponse
Avatar
Thibault
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("<table Border='1' ID='Table1'>")
sbrHTML.Append("<tr><td colSpan='11'><center><font
size='4'>Ventes - Export des CODECD du " +
Date.Today.ToLongDateString.ToString + "</font></center></td></tr>")
sbrHTML.Append("<tr><th>CODECD</th><th>Description
produit</th><th>Fournisseur(s) 1</th><th>Fournisseur(s)
2</th><th>PPUB</th><th>PPUB Min.</th><th>PPUB Max.</th><th>Ecart
Type</th><th>Quantité</th><th>Nombre de
pharmacie(s)</th><th>WeekCode</th></tr>")

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("<tr>")
If Not IsDBNull(mDr.Item("CSA_CODECD")) Then
sbrHTML.Append("<td>" +
mDr.Item("CSA_CODECD").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_PRDDESC")) Then
sbrHTML.Append("<td>" +
mDr.Item("CSA_PRDDESC").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_PSUP")) Then
sbrHTML.Append("<td>" +
mDr.Item("CSA_PSUP").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_SSUP")) Then
sbrHTML.Append("<td>" +
mDr.Item("CSA_SSUP").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_AVG_PRICE"))
Then
sbrHTML.Append("<td>" +
FormatNumber(mDr.Item("CSA_AVG_PRICE"), 2) + " €</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_MIN_PRICE"))
Then
sbrHTML.Append("<td>" +
FormatNumber(mDr.Item("CSA_MIN_PRICE"), 2) + " €</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_MAX_PRICE"))
Then
sbrHTML.Append("<td>" +
FormatNumber(mDr.Item("CSA_MAX_PRICE"), 2) + " €</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_STDEV_PRICE"))
Then
sbrHTML.Append("<td>" +
FormatNumber(mDr.Item("CSA_STDEV_PRICE"), 2) + " €</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_SUM_QTY")) Then
sbrHTML.Append("<td>" +
Format(mDr.Item("CSA_SUM_QTY"), "# ##0").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not
IsDBNull(mDr.Item("CSA_COUNT_PHARCD")) Then
sbrHTML.Append("<td>" +
Format(mDr.Item("CSA_COUNT_PHARCD"), "# ##0").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_WEEKCD")) Then
sbrHTML.Append("<td>" +
mDr.Item("CSA_WEEKCD").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
sbrHTML.Append("</tr>")

End While

mDr.Close()
mConn.Close()

Catch ex As Exception

TitreInfoText.Text = "Une erreur est survenue"
MessageInfoText.Text = "<b>Message : </b>" &
ex.Message & "<br>"
MessageInfoText.Text &= "<b>Source : </b>" &
ex.Source & "<br>"
MessageInfoText.Text &= "<b>Détail : </b>" &
ex.StackTrace
PanelInfo.Visible = True

End Try

End If
Next

End If

sbrHTML.Append("</table>")

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 à l'utilisateur
Response.WriteFile(myFileName)

Catch ex As Exception

TitreInfoText.Text = "Une erreur est survenue"
MessageInfoText.Text = "<b>Message : </b>" & ex.Message & "<br>"
MessageInfoText.Text &= "<b>Source : </b>" & ex.Source & "<br>"
MessageInfoText.Text &= "<b>Détail : </b>" & ex.StackTrace
PanelInfo.Visible = True

End Try
End Sub


Merci d'avance pour votre aide.

1 réponse

Avatar
Marc (Fr)
salut,

ton datareader est-il bien rempli ? as-tu verifié le contenu des champs en
executant le code en pas a pas par exemple ?

une petite remarque, ca serait plus sympa de mettre l'ouverture et la
fermeture de connexion a l'exterieur de ton for each ... next ; enfin c'est
mon avis :-)

Marc.

"Thibault" a écrit :

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("<table Border='1' ID='Table1'>")
sbrHTML.Append("<tr><td colSpan='11'><center><font
size='4'>Ventes - Export des CODECD du " +
Date.Today.ToLongDateString.ToString + "</font></center></td></tr>")
sbrHTML.Append("<tr><th>CODECD</th><th>Description
produit</th><th>Fournisseur(s) 1</th><th>Fournisseur(s)
2</th><th>PPUB</th><th>PPUB Min.</th><th>PPUB Max.</th><th>Ecart
Type</th><th>Quantité</th><th>Nombre de
pharmacie(s)</th><th>WeekCode</th></tr>")

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("<tr>")
If Not IsDBNull(mDr.Item("CSA_CODECD")) Then
sbrHTML.Append("<td>" +
mDr.Item("CSA_CODECD").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_PRDDESC")) Then
sbrHTML.Append("<td>" +
mDr.Item("CSA_PRDDESC").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_PSUP")) Then
sbrHTML.Append("<td>" +
mDr.Item("CSA_PSUP").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_SSUP")) Then
sbrHTML.Append("<td>" +
mDr.Item("CSA_SSUP").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_AVG_PRICE"))
Then
sbrHTML.Append("<td>" +
FormatNumber(mDr.Item("CSA_AVG_PRICE"), 2) + " €</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_MIN_PRICE"))
Then
sbrHTML.Append("<td>" +
FormatNumber(mDr.Item("CSA_MIN_PRICE"), 2) + " €</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_MAX_PRICE"))
Then
sbrHTML.Append("<td>" +
FormatNumber(mDr.Item("CSA_MAX_PRICE"), 2) + " €</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_STDEV_PRICE"))
Then
sbrHTML.Append("<td>" +
FormatNumber(mDr.Item("CSA_STDEV_PRICE"), 2) + " €</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_SUM_QTY")) Then
sbrHTML.Append("<td>" +
Format(mDr.Item("CSA_SUM_QTY"), "# ##0").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not
IsDBNull(mDr.Item("CSA_COUNT_PHARCD")) Then
sbrHTML.Append("<td>" +
Format(mDr.Item("CSA_COUNT_PHARCD"), "# ##0").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
If Not IsDBNull(mDr.Item("CSA_WEEKCD")) Then
sbrHTML.Append("<td>" +
mDr.Item("CSA_WEEKCD").ToString() + "</td>")
Else
sbrHTML.Append("<td></td>")
End If
sbrHTML.Append("</tr>")

End While

mDr.Close()
mConn.Close()

Catch ex As Exception

TitreInfoText.Text = "Une erreur est survenue"
MessageInfoText.Text = "<b>Message : </b>" &
ex.Message & "<br>"
MessageInfoText.Text &= "<b>Source : </b>" &
ex.Source & "<br>"
MessageInfoText.Text &= "<b>Détail : </b>" &
ex.StackTrace
PanelInfo.Visible = True

End Try

End If
Next

End If

sbrHTML.Append("</table>")

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

Dim swXLS As StreamWriter = New
StreamWriter(Server.MapPath("UnknownManagementIHMExportReport") +
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 à l'utilisateur
Response.WriteFile(myFileName)

Catch ex As Exception

TitreInfoText.Text = "Une erreur est survenue"
MessageInfoText.Text = "<b>Message : </b>" & ex.Message & "<br>"
MessageInfoText.Text &= "<b>Source : </b>" & ex.Source & "<br>"
MessageInfoText.Text &= "<b>Détail : </b>" & ex.StackTrace
PanelInfo.Visible = True

End Try
End Sub


Merci d'avance pour votre aide.