Bonjour tous le monde,
J'ai un petit souci avec l'exportation d'un fichier excel vers le client.
Je vous explique le cheminement de ma page. C'est une page de recher dans l'annuaire de la société. J'affiche les résultats de la recherche dans un datagrid.
A ce moment j'ai la possibilité d'imprimer ou d'exporter les résultats vers Excel.
Mon problème concerne l'exportation vers Excel (j'ai pas encore attaqué l'impression )
Je dois créer un fichier excel sur le serveur (crypté de telle sorte que quand on essaye de l'ouvrir avec le bloc note on obtient de très jolis hiéroglyphes), l'envoyer au client puis supprimer ce fichier.
Je sais c'est compliqué mais c'est ce qui m'a été demandé.
Ce qui m'embète c'est la suppression, elle s'effectue avant que le client n'est télécharger le fichier.
Vu que mes explications ont l'air un peu brouillon je vous mets mon code
Voilà comme ça ce sera peut-être plus clair.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 Protected Sub BtExport_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles BtExport.Click Dim ds As Data.DataSet Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim oRow As Data.DataRow Dim oCol As Data.DataColumn Dim nCol As Integer = 0 Dim nRow As Integer = 1 'Dim i As Integer 'Recuperation du datagrid ds = Session("dsAnnuaire") 'Generation du fichier excel xlApp = New Excel.Application xlApp.Visible = False xlBook = xlApp.Workbooks.Add xlSheet = xlApp.Sheets(1) 'Ecriture du nom des colonnes For Each oCol In ds.Tables(0).Columns If oCol.ColumnName <> "PHOTO" And oCol.ColumnName <> "PHOTOALT" Then nCol += 1 xlSheet.Cells(1, nCol) = oCol.ColumnName End If Next oCol 'Ecriture des données du datagrid dans les colonnes For Each oRow In ds.Tables(0).Rows nCol = 0 nRow += 1 For Each oCol In ds.Tables(0).Columns If oCol.ColumnName <> "PHOTO" And oCol.ColumnName <> "PHOTOALT" Then nCol += 1 xlSheet.Cells(nRow, nCol) = oRow(oCol.ColumnName).ToString() End If Next oCol Next oRow 'Sauvegarde du fichier Excel xlSheet.SaveAs(Server.MapPath("Template") + "\" + Session("matricule") + ".xls") 'Fermeture de l'application Excel xlSheet = Nothing xlBook = Nothing If Not IsNothing(xlApp) Then xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) xlApp = Nothing End If 'Envoie du fichier au client Response.Clear() Response.ContentType = "application/x-msexcel" Response.AddHeader("Content-Disposition", "inline; filename=Annuaire.xls") 'Response.WriteFile(Server.MapPath("Template") + "\" + Session("matricule") + ".xls") Response.TransmitFile(Server.MapPath("Template") + "\" + Session("matricule") + ".xls") 'Delete du fichier sur le serveur System.IO.File.Delete(Server.MapPath("Template") + "\" + Session("matricule") + ".xls") End Sub
Donc le fichier s'efface du serveur avant que le navigateur lui ai proposé de le récupérer sur son poste. Je suis sur que ca vient de là car si j'enléve le Delete du fichier, le Download s'effectue sans problème et le fichier Excel généré est exactement ce que je veux.
Si quelqu'un pouvait m'aider ou aurait une autre méthode à me proposer ça m'aiderai grandement.
Merci d'avance à tous et bon code
Partager