VB.NET 2010 export de donnée d'un datagridviw vers excell

Résolu
merlin1977 Messages postés 13 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 26 novembre 2012 - 26 nov. 2012 à 15:28
merlin1977 Messages postés 13 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 26 novembre 2012 - 26 nov. 2012 à 18:44
Bonjour,
j'utilise le code ci-dessous pour exporter des données depuis des datagridview, tout fonctionne bien sous visual studio 2008 et tout fonctionne si j'importe un projet de visual studio 2008 vers visual studio 2010 mais si je crée le module dans visual studio 2010 ou que je l'importe j'ai beau bien référencer mon Excel... j'ai un message d'erreur :

Erreur 4 Impossible d'incorporer le type interop 'ApplicationClass'. Utilisez l'interface applicable à la place.
qui correspond à la ligne :

Dim excel As New Excel.ApplicationClass

Voir tout le code normalement fonctionnel ci-dessous


Imports Microsoft.Office.Interop

Module ExportExcell

    'necessite la reference microsoft excel X object
    Sub export(ByVal snamedatagridview As Object)
        Try
            If ((snamedatagridview.Columns.Count 0) Or (snamedatagridview.Rows.Count 0) Or (snamedatagridview.Rows.Count > 60000)) Then
                Exit Sub
            End If

            'Creating dataset to export
            Dim dset As New DataSet
            'add table to dataset
            dset.Tables.Add()
            'add column to that table
            For i As Integer = 0 To snamedatagridview.ColumnCount - 1
                dset.Tables(0).Columns.Add(snamedatagridview.Columns(i).HeaderText)
            Next
            'add rows to the table
            Dim dr1 As DataRow
            For i As Integer = 0 To snamedatagridview.RowCount - 1
                dr1 = dset.Tables(0).NewRow
                For j As Integer = 0 To snamedatagridview.Columns.Count - 1
                    dr1(j) = snamedatagridview.Rows(i).Cells(j).Value
                Next
                dset.Tables(0).Rows.Add(dr1)
            Next

            Dim excel As New Excel.ApplicationClass
            Dim wBook As Microsoft.Office.Interop.Excel.Workbook
            Dim wSheet As Microsoft.Office.Interop.Excel.Worksheet

            wBook = excel.Workbooks.Add()
            wSheet = wBook.ActiveSheet()

            Dim dt As System.Data.DataTable = dset.Tables(0)
            Dim dc As System.Data.DataColumn
            Dim dr As System.Data.DataRow
            Dim colIndex As Integer = 0
            Dim rowIndex As Integer = 0

            For Each dc In dt.Columns
                colIndex = colIndex + 1
                excel.Cells(1, colIndex) = dc.ColumnName
            Next

            For Each dr In dt.Rows
                rowIndex = rowIndex + 1
                colIndex = 0
                For Each dc In dt.Columns
                    colIndex = colIndex + 1
                    excel.Cells(rowIndex + 1, colIndex) = dr(dc.ColumnName)

                Next
            Next

            wSheet.Columns.AutoFit()
            Dim strFileName As String = Environment.CurrentDirectory & "\temp.xls"
            Dim blnFileOpen As Boolean = False
            Try
                Dim fileTemp As System.IO.FileStream = System.IO.File.OpenWrite(strFileName)
                fileTemp.Close()
            Catch ex As Exception
                blnFileOpen = False
            End Try

            If System.IO.File.Exists(strFileName) Then
                System.IO.File.Delete(strFileName)
            End If

            wBook.SaveAs(strFileName)
            excel.Workbooks.Open(strFileName)
            excel.Visible = True
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
End Module




Merci de votre aide je me cogne la tête contre les murs....




Gros débutant cherche à progresser :)

3 réponses

Je suis novice également, mais j'ai du faire face au même problème que toi.

Enlève class de ton Dim excel As New Excel.ApplicationClass et ça marchera.

Bonne continuation.
1
Utilisateur anonyme
26 nov. 2012 à 18:11
Bonjour,

Ajoute une référence à Excel lui-même,comme tu l'as déjà fait pour Office et remplace la ligne:

 Dim excel As New Excel.ApplicationClass


par

Dim Excel As Microsoft.Office.Interop.Excel
0
merlin1977 Messages postés 13 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 26 novembre 2012
26 nov. 2012 à 18:44
Merci beaucoup pour vos réponse ça marche parfaitement en mettant Dim excel As New Excel.Application
ce qui est hallucinant c'est que lorsqu'on importe un ancien projet de 2008 vers 2010 il garde l'ancien code et que là ça marche!!
Encore merci pour votre aide j'étais pas du tout parti sur une solution de ce type.





Gros débutant cherche à progresser :)
0
Rejoignez-nous