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


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
Voilà comme ça ce sera peut-être plus clair.
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