IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.Net] - Acces à Excel depuis VB.Net


Sujet :

Windows Forms

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut [VB.Net] - Acces à Excel depuis VB.Net
    Bonjour,

    J'ai encore un petit problème. Je voudrais sauvegarder un tableau crée sous VB.Net dans un fichier Excel pour pouvoir l'utiliser par la suite.
    Est ce possible simplement ??

    Je n'ai trouvé que des conseils utilisant ASP.Net et je ne sais pas trop à quoi cela correspond.

    Merci d'avance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    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
    Private Sub ExpExcel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ExpExcel.Click
     
            Dim CheminDuFichier As String
            Dim myTable As DataTable
            Dim myRow As DataRow
            Dim myColumn As DataColumn
            Dim i, j, Findex, nbCol As Integer
     
            SFD_1.Title = "Choisir un emplacement pour enregistrer le fichier Excel."
            SFD_1.InitialDirectory = "c:\"
            SFD_1.Filter = "Fichiers Excel (*.xls)|*.xls"
            SFD_1.FilterIndex = 2
            SFD_1.RestoreDirectory = True
            If SFD_1.ShowDialog() = DialogResult.OK Then
                CheminDuFichier = SFD_1.FileName
     
                Try
                    Dim app As New Microsoft.Office.Interop.Excel.Application
                    Dim exbook As Microsoft.Office.Interop.Excel.Workbook
                    Dim exsheet As Microsoft.Office.Interop.Excel.Worksheet
     
                    Findex = 0
     
                    REM : une feuille par tableau
                    For Each Style As DataGridTableStyle In DG_1.TableStyles
                        Findex = Findex + 1
                        exbook = app.Workbooks.Add
                        exsheet = exbook.Sheets(Findex)
                        exsheet.Name = Style.MappingName
     
                        REM : titre des colonnes
                        i = 0
                        nbCol = 0
                        For Each Colonne As DataGridColumnStyle In Style.GridColumnStyles
                            exsheet.Cells.ApplyOutlineStyles()
                            exsheet.Cells(1, i + 1) = Colonne.HeaderText
                            exsheet.Cells(1, i + 1).Font.Bold = True
                            exsheet.Cells(1, i + 1).Font.color = RGB(255, 0, 0)
                            i = i + 1
                            nbCol = nbCol + 1
                        Next
     
                        REM : chargement des données
                        For j = 0 To dataset.Tables(0).Rows.Count - 1
                            For i = 0 To nbCol - 1
                                exsheet.Cells(j + 2, i + 1).NumberFormat = "@"
                                exsheet.Cells(j + 2, i + 1).ColumnWidth = 18
                                exsheet.Cells(j + 2, i + 1) = CType(DG_1.Item(j, i) & "", String)
                            Next
                        Next
                    Next
                    exbook.SaveAs(CheminDuFichier)
                    app.Visible = True
                    Exit Sub
                Catch ex As Exception
                    MessageBox.Show(ex.ToString)
                End Try
            End If
     
        End Sub

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour ta réponse, mais VB me dit que

    'Microsoft.Office.Interop.Excel.Application' type is not defined
    'Microsoft.Office.Interop.Excel.Workbook' type is not defined
    'Microsoft.Office.Interop.Excel.Worksheet' type is not defined

    de plus, il ne reconnait pas SFD_1.
    Je pense qu'il doit falloir importer une library MS Office mais je ne sais pas comment faire.

    En tout cas merci, ça me donne de quoi démarer

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    Oui j'ai pas vraiment expliqué...
    Il faut ajouter une référence à ton projet : Microsoft.Office.Interop.Excel.
    Mais je ne sais plus où j'ai téléchargé la dll.

    SFD_1 ne t'est pas forcément nécessaire, c'est pour que l'utilisateur choisisse l'emplacement d'enregistrement du fichier (tu peux le faire par programme). C'est un composant WindowsSaveFileDialog (présent dans visual studio et à ajouter en design de ta form).

  5. #5
    Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Encore un petit problème (décidement !!)

    Si j'execute le code comme il est présenté, je reçois un message d'erreur me disant lorsque j'essaie de sauvegarder le fichier :

    System.NullReferenceException : Object Reference not set to an instance of an object ..... et ça concerne la ligne

    'exbook.SaveAs(CheminDuFichier)'

    Je sais vraiment pas ce que ça veut dire, et si j'essaie de créer une instance de la classe 'Microsoft.Office.Interop.Excel.Workbook' grâce à NEW, l'erreur survient plus tot dans le code ..

    Merci beaucoup pour votre aide

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    Passes-tu dans la boucle For ?

  7. #7
    Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    En fait les données ne viennent pas d'une datagrid mais d'un simple tableau de valeurs (du genre Tab(21,61) as double).

    Donc en fait basiquement ce serait juste de prendre la partie ou on crée la feuille excel comme faisant partie d'un workbook, on la remplit et on la sauvegarde ...

    Mais oui, pour répondre à ta question je passe par la boucle, et ça plante lors de l'enregistrement. En fait, je peux modifier exbook, exsheet mais quand je veux les enregistrer, il ne les reconnait pas en tant qu'instances de classe ... je comprend pas

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    Peux-tu montrer ton code ?

  9. #9
    Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Pas de problème, le voila

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
     
     
    Imports Microsoft.Office.Interop.Excel
     
    Public Class Form1
        Inherits System.Windows.Forms.Form
     
    #Region " Windows Form Designer generated code "
     
        Public Sub New()
            MyBase.New()
     
            'This call is required by the Windows Form Designer.
            InitializeComponent()
     
            'Add any initialization after the InitializeComponent() call
     
        End Sub
     
        'Form overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
     
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
     
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        Friend WithEvents SFD_1 As System.Windows.Forms.SaveFileDialog
        Friend WithEvents DG_1 As System.Windows.Forms.DataGrid
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.SFD_1 = New System.Windows.Forms.SaveFileDialog
            Me.DG_1 = New System.Windows.Forms.DataGrid
            CType(Me.DG_1, System.ComponentModel.ISupportInitialize).BeginInit()
            Me.SuspendLayout()
            '
            'DG_1
            '
            Me.DG_1.DataMember = ""
            Me.DG_1.HeaderForeColor = System.Drawing.SystemColors.ControlText
            Me.DG_1.Location = New System.Drawing.Point(8, 64)
            Me.DG_1.Name = "DG_1"
            Me.DG_1.Size = New System.Drawing.Size(264, 160)
            Me.DG_1.TabIndex = 0
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(292, 273)
            Me.Controls.Add(Me.DG_1)
            Me.Name = "Form1"
            Me.Text = "Form1"
            CType(Me.DG_1, System.ComponentModel.ISupportInitialize).EndInit()
            Me.ResumeLayout(False)
     
        End Sub
     
    #End Region
     
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Dim CheminDuFichier As String
            Dim myTable As DataTable
            Dim myRow As DataRow
            Dim myColumn As DataColumn
            Dim i, j, Findex, nbCol As Integer
            Dim Values(1, 2) As Double
     
            SFD_1.Title = "Choisir un emplacement pour enregistrer le fichier Excel."
            SFD_1.InitialDirectory = "c:\"
            SFD_1.Filter = "Fichiers Excel (*.xls)|*.xls"
            SFD_1.FilterIndex = 2
            SFD_1.RestoreDirectory = True
     
            If SFD_1.ShowDialog() = DialogResult.OK Then
                CheminDuFichier = SFD_1.FileName
     
            Try
                Dim app As New Microsoft.Office.Interop.Excel.Application
                Dim exbook As Microsoft.Office.Interop.Excel.Workbook
                Dim exsheet As Microsoft.Office.Interop.Excel.Worksheet
     
                Values(0, 0) = 1
                Values(0, 1) = 3
                Values(1, 0) = 2
                Values(1, 1) = 4
                Values(0, 2) = 1
                Values(1, 2) = 2
                Findex = 0
     
     
                REM : une feuille par tableau 
                For Each Style As DataGridTableStyle In DG_1.TableStyles
                    Findex = Findex + 1
                    exbook = app.Workbooks.Add
                    exsheet = exbook.Sheets(Findex)
                    exsheet.Name = Style.MappingName
     
                    REM : titre des colonnes 
                    i = 0
                    nbCol = 0
                    For Each Colonne As DataGridColumnStyle In Style.GridColumnStyles
                        exsheet.Cells.ApplyOutlineStyles()
                        exsheet.Cells(1, i + 1) = Colonne.HeaderText
                        exsheet.Cells(1, i + 1).Font.Bold = True
                        exsheet.Cells(1, i + 1).Font.color = RGB(255, 0, 0)
                        i = i + 1
                        nbCol = nbCol + 1
                    Next
     
                    REM : chargement des données 
                        For j = 0 To 2
                            For i = 0 To 1
                                exsheet.Cells(j + 2, i + 1).NumberFormat = "@"
                                exsheet.Cells(j + 2, i + 1).ColumnWidth = 18
                                exsheet.Cells(j + 2, i + 1) = Values(i, j)
                            Next
                        Next
                    Next
                exbook.SaveAs(CheminDuFichier)
                app.Visible = True
                Exit Sub
            Catch ex As Exception
                MessageBox.Show(ex.ToString)
            End Try
     
            End If
        End Sub
     
    End Class

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    ahhhhhh ! y a erreur dans tes balises ! Peux-tu recommencer sans erreur stp ?

  11. #11
    Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Désolé d'etre lourd mais je débute ...
    Qu'entends tu par balises exactement ??

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    Ta balise Code doit de terminer par [/code].

    Mais bon, je commence à regarder : ton DG_1 est vide donc je ne vois pas ce qu'il peut trouver comme Style et comme Colonne. :

    Et puis pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports Microsoft.Office.Interop.Excel
    :
    Il suffit d'ajout le composant à ta form.

  13. #13
    Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Pour la balise c'est réglé (vraiment désolé je savais pas !!)
    J'ai viré le Imports et effectivement ça marche tot aussi bien.

    Pour le probleme du datagrid, je n'en ai pas besoin, puisque mes valeurs doivent être copiées directement à partir de 'valeurs'.

    Mais j'ai essayé d'adapter le code, et j'ai pas réussi ... En fait, c'ets tout simple, c'ets juste des valeurs qu'il faut ajouter dans un seul tableau puis sauvegarder.

    Merci beaucoup en tout cas, je vais essayer de me débrouiller

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 80
    Points : 83
    Points
    83
    Par défaut
    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
     
        If SFD_1.ShowDialog() = DialogResult.OK Then 
            CheminDuFichier = SFD_1.FileName 
     
            Try 
                Dim app As New Microsoft.Office.Interop.Excel.Application 
                Dim exbook As Microsoft.Office.Interop.Excel.Workbook 
                Dim exsheet As Microsoft.Office.Interop.Excel.Worksheet 
     
                Values(0, 0) = 1 
                Values(0, 1) = 3 
                Values(1, 0) = 2 
                Values(1, 1) = 4 
                Values(0, 2) = 1 
                Values(1, 2) = 2 
     
                exbook = app.Workbooks.Add 
                exsheet = exbook.Sheets(1) 
                exsheet.Name = "Test Toto"
     
                REM : chargement des données 
                For j = 0 To 1 
                     For i = 0 To 2
                         exsheet.Cells(j+1, i + 1) = Values(i, j) 
                     Next 
                Next 
     
                exbook.SaveAs(CheminDuFichier) 
                app.Visible = True 
                Exit Sub 
            Catch ex As Exception 
                MessageBox.Show(ex.ToString) 
            End Try 
        End If
    C'est plus simple, mais là si ça ne marche pas je sèche.

    Bon courage.

  15. #15
    Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Ouhia ben désolé mais ça marche toujours pas ... quand je debugg je vois qu'il catch une exception et qu"il affiche la messagebox .... mais je sais pas trop d'ou ça vient.

    Merci pour ton temps en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Proteger fichier excel depuis VB.NET
    Par Florian54 dans le forum VB.NET
    Réponses: 1
    Dernier message: 23/02/2011, 16h35
  2. Accès à DB2 depuis programme .net C#
    Par stlen dans le forum DB2
    Réponses: 0
    Dernier message: 05/09/2009, 19h45
  3. accès MySQL depuis VB.Net via WAMP et pc virtuel
    Par PandoraKev dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/05/2009, 20h46
  4. Piloter Excel depuis vb.net
    Par l_achraf dans le forum VB.NET
    Réponses: 7
    Dernier message: 02/04/2009, 20h05
  5. Accès à firebird depuis le NET
    Par QAYS dans le forum Connexion aux bases de données
    Réponses: 3
    Dernier message: 09/04/2007, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo