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] controler Excel dans une Form ?


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 41
    Points : 31
    Points
    31
    Par défaut [Résolu][VB.net] controler Excel dans une Form ?
    Bonjour,
    Je suis en VB.Net Express 2005.
    Je voudrais ouvrir un classeur Excel, l'afficher dans un Panel de ma Form et avoir accès à toutes les fonctionnalités de Excel.

    D'un côté, je sais lancer une appli Excel en VB.Net :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        Dim WithEvents AppExcel As Excel.Application
        Dim WithEvents Classeur As Excel.Workbook
        Dim Feuille As Excel.Worksheet
        Friend WithEvents Panel1 As System.Windows.Forms.Panel
        Dim WithEvents win As Excel.Window
     
    AppExcel = New Excel.Application
    Classeur = AppExcel.Workbooks.Open("D:\essvb.xls")
    Feuille = Classeur.ActiveSheet
    win = AppExcel.Windows(1)
    ...
    De l'autre, je sais lancer excel dans un Panel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim pinfo As New ProcessStartInfo("D:\essvb.xls")
    Dim p As Process = System.Diagnostics.Process.Start(pinfo)
    p.WaitForInputIdle()
    SetParent(p.MainWindowHandle, Me.Panel1.Handle)
    Mais là je ne vois qu'un process. Je ne sais pas accéder aux feuilles, cellules, etc d'Excel . .

    En résumé, je voudrais mettre mon AppExcel dans le Panel par SetParent.
    Quelqu'un saurait comment faire ?

    Merci!

    Sergio

  2. #2
    Membre régulier Avatar de Davide
    Profil pro
    Inscrit en
    Août 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 80
    Points : 84
    Points
    84
    Par défaut
    Regarde ceci
    http://blogs.msdn.com/eric_carter/archive/2006/03/21/556796.aspx

    Vu sur le blog de Morpheus

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    Merci mais j'ai oublié de dire que je suis en Excel 2000 donc pas de VSTO, pas de PIAs, etc.

    Sinon j'ai également essayé en récupérant le handle de la fenêtre Excel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    AppExcel = New Excel.Application
    Classeur = AppExcel.Workbooks.Open("D:\essvb.xls")
    Feuille = Classeur.ActiveSheet
     
    hwndExcel = FindWindow("XLMAIN", AppExcel.Caption)
     
    SetParent(hwndExcel, Me.Panel1.Handle)
    Mais là, rien ne s'affiche
    Donc je continue à chercher ...

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    Tu peux toujours l'afficher dans un composant WebBrowser.
    Cela dit, si tu trouves mieux, ça m'intéresse.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    En fouillant j'ai trouvé la solution dont tu parles et donné par Microsoft : le WebBrowser
    http://support.microsoft.com/?scid=k...d=2530&sid=276

    Mais ça ne marche pas non plus : affichage dans une fenêtre indépendante.
    J'ai même essayé leur code pour VB6 : idem.

    Finalement j'ai quand même trouvé : je récupère le process dans la liste des process et j'en tire la propriété MainWindowHandle :

    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
     
        AppExcel = New Excel.Application
        Classeur = AppExcel.Workbooks.Open("D:\essvb.xls")
        Feuille = Classeur.ActiveSheet
     
        hwndExcel = getExcelWinHandle()
        SetParent(hwndExcel, Me.Panel1.Handle)
     
         ....
     
        Private Function getExcelWinHandle() As System.IntPtr
            Try
                Return System.Diagnostics.Process.GetProcessesByName("EXCEL")(0).MainWindowHandle
            Catch ex As Exception
                Return 0
            End Try
        End Function
    Là c'est un peu brut de fonderie : Avec l'indice 0, je prends le 1er process EXCEL de la liste s'il y en a plusieurs.

    Et maintenant ma fenêtre excel est (enfin !) affichée dans mon Panel1 et j'ai le controle sur ma feuille via vb.net.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    Ton code m'interesse grandement .....

    Mais d'ou sors-tu cette méthode ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetParent(hwndExcel, Me.Panel1.Handle)

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 41
    Points : 31
    Points
    31
    Par défaut
    En fait j'avais le code qui permettait de mettre une feuille Excel dans une Frame VB6 et qui utilisait SetParent C'est une API

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    OK merci, je vais tester ca .....

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Je bosse sur VS.NET 2002 et je code en VB.NET
    Je suis hyper intéréssé par le code proposé au dessus, mais pas moyen d'obtenir le résultat voulu (et pourtant j'utilise le même code). Ca m'ouvre bien une instance d'excel (ou la feuille excel que je spécifie) mais pas moyen de faire apparaitre Excel dans un contrôle (que ce soit un panel comme ici ou autre chose, j'en ai essayé plusieurs). Est ce que ca pourrait être du à ma version du framework (1.0 dans mon cas) ? Ou est qu'il faut que je creuse du coté du bug à la con ? (tjrs caché apres 2 jours d'énervement intensifs )

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

Discussions similaires

  1. Mise a jour de controle utilisateur dans une forme
    Par pascalwick dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/12/2008, 16h53
  2. [D7] Ouvrir Excel dans une form
    Par MiJack dans le forum Composants VCL
    Réponses: 3
    Dernier message: 07/12/2007, 21h17
  3. Importer une feuille excel dans une Form
    Par piepio dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/02/2007, 10h37
  4. [VB.NET] extraire tt les controls prensents dans une form.
    Par Splash dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/12/2005, 20h12
  5. excel dans une form Delphi
    Par jakouz dans le forum Composants VCL
    Réponses: 3
    Dernier message: 09/09/2005, 18h36

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