VB.net et Excel

dianaTours Messages postés 5 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 26 octobre 2007 - 25 oct. 2007 à 09:40
GEDDi Messages postés 206 Date d'inscription lundi 22 novembre 1999 Statut Membre Dernière intervention 3 juillet 2008 - 26 oct. 2007 à 20:15
Bonjour,
je voudrais savoir si quelqu'un sait comment faire pour pouvoir ouvrir un fichier Excel à l'intérieur d'une fenêtre VB.net,
J'ai vu plein de choses sur le net, mais la plupart des exemples sont faits en VB 6.
J'ai réussi à afficher mon fichier Excel dans un webbrowser , mais le problème c'est qu'avec cette méthode, je ne peux pas avoir le controle sur mon fichier.
Si quelqu'un sait quelle est la meilleure méthode, merci de me l'expliquer .Je suis sur un projet et c'est très urgent pour moi .
Merci beaucoup
dd2007

3 réponses

GEDDi Messages postés 206 Date d'inscription lundi 22 novembre 1999 Statut Membre Dernière intervention 3 juillet 2008
25 oct. 2007 à 17:30
Bonjour,

En créant une instance de OWC.Spreadsheet tu pourras piloter un Excel dans une form Windows :)
Voici un exemple tout bête qui ouvre un OWC Excel ( écrit en FBSL ) :

#DllDeclare ATL( "AtlAxWinInit", "AtlAxGetControl" )
Dim %Lefti, %Topi, %Righti, %Bottomi, %XL, %hWnd

Sub Command1_Click()
    PostMessage( Me, WM_SIZE, 0, 0 ): Show(Me)
End Sub

Sub Form_Load()
Dim $WinName
    AtlAxWinInit()
    WinName = "OWC.Spreadsheet"
    hWnd = FBSL_Control("AtlAxWin", Me, WinName, _
           0, 0, 15, 620, 460, WS_CHILD Bor WS_VISIBLE, 0)
    AtlAxGetControl( hWnd, @XL )
End Sub

Sub RefreshAfxControl()
   GetClientRect( Me, Lefti, Topi, Righti, Bottomi )
   ReSize(hWnd, 0, 30, Righti - 15, Bottomi - 60)
   Refresh(hWnd)
End Sub

Sub QuitMe()
   ReleaseObject( XL ): ExitProgram(0)
End Sub

Sub Main()
   Resize(Me, 0, 0, 640, 480 )
   Center(Me)
   Form_Load()  
   Command1_Click()
   Begin Events
      If CBMsg = WM_CLOSE Then QuitMe()
      If CBMSG = WM_SIZE Then RefreshAfxControl()
   End Events
End Sub

Gérôme GUILLEMIN
Auteur du langage FBSL
0
dianaTours Messages postés 5 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 26 octobre 2007
26 oct. 2007 à 19:29
Merci beaucoup pour ta réponse, mais en fait en continuant les
recherches j'ai réussi à faire un exemple qui fonctionne bien. Mais ca
ressemble beaucoup au code que tu as au dessus.

voici un extrait en vb.net:


'La forme contient un composant PictureBox dans lequel j'ouvre mon fichier Excel

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Me.IsMdiContainer = True

        Try

            MonExcel = getExcelWinHandle()


            If MonExcel.ToInt32 <> 0 Then

               
hParent = SetParent(MonExcel, PictureBox1.Handle)

               
GetWindowRect(PictureBox1.Handle, recte)

               
MoveWindow(MonExcel, 0, 0, recte.right - recte.left, Height =
recte.bottom - recte.top, False)


            End If

        Catch ex As Exception

            MsgBox(ex.ToString)


        End Try

    End Sub


Private Function getExcelWinHandle() As System.IntPtr

        Try

           
Return
System.Diagnostics.Process.GetProcessesByName("EXCEL")(0).MainWindowHandle

        Catch ex As Exception

            MsgBox(ex.ToString)

            'Return 0

        End Try

    End Function

dd2007
0
GEDDi Messages postés 206 Date d'inscription lundi 22 novembre 1999 Statut Membre Dernière intervention 3 juillet 2008
26 oct. 2007 à 20:15
Hello,

Ton code est une pure bidouille qui 'embarque' un controle via son handle dans un handle 'parent'.
Cette technique est sympa mais n'a rien à voir avec OWC qui est un composant Office developpé pour etre expressement raccordé à un controle, meme si le resultat au final te semble similaire :)
Autre différence : FBSL ressemble à .NET, sauf qu'il est compilable en EXE autonaume et qu'il permet de faire de l'introspection, aspect non négligeable :)

Gérôme GUILLEMIN
Auteur du langage FBSL
0
Rejoignez-nous