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

ASP.NET Discussion :

Lancer une application Excel qu'une seule fois pour plusieurs pages aspx


Sujet :

ASP.NET

  1. #1
    Courgette17
    Invité(e)
    Par défaut Lancer une application Excel qu'une seule fois pour plusieurs pages aspx
    Voila j'ai 3 pages aspx qui forment une application web et qui sont chacune liées à leurs fichiers codebehind en aspx.vb donc j'utilise Visual Basic .NET.
    Chacune de ses pages comporte une fonction précise à savoir faire la mise à jour d'un fichier de suivi, faire un fichier de synthèse à partir d'un gros fichier etc.

    Sur chacune de ses pages après que les utilisateurs aient choisi leur fichier et l'aient validé, ils cliquent sur un bouton principal qui effectuent toutes les opérations Excel.

    Jusqu'ici tout va.
    Alors bien sur ces opérations Excel lancent un processus EXCEL en arrière plan seulement visible par le gestionnaire des tâches, que je ne peux arrêter vu que j'interviens sur cette application sur un serveur à distance.
    Je voulais savoir alors si il est possible d'utiliser un seul et unique processus Excel pour les 3 pages, que je lance une seule fois lorsque je clique sur l'un des boutons "principaux" et que je réutiliserai à chaque fois que je lance une autre opération, par exemple, faire la synthèse puis la mise à jour avec le même processus.

    Si je ne pouvais n'en avoir qu'un qui fait tout, ce serait vraiment bien.

    Merci d'avance

    MadMarc

  2. #2
    Courgette17
    Invité(e)
    Par défaut
    J'ai trouvé cette page super utile pour ma question:
    http://msdn2.microsoft.com/en-us/lib...63(VS.71).aspx

    Mais par contre pour sortir une seule variable qui me dit True ou False (si Excel est déja lancé) à partir de la fonction DetectExcel c'est pas une mince affaire.

    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
    ' Add Option Strict Off to the top of your program.
    Option Strict Off
     ' Declare necessary API routines:
       Declare Function FindWindow Lib "user32" Alias _
          "FindWindowA" (ByVal lpClassName As String, _
          ByVal lpWindowName As Long) As Long
     
       Declare Function SendMessage Lib "user32" Alias _
       "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _
          ByVal wParam As Long, ByVal lParam As Long) As Long
     
    Sub GetExcel()
       Dim MyXL As Object   ' Variable to hold reference
       ' to Microsoft Excel.
       Dim ExcelWasNotRunning As Boolean   ' Flag for final release.
     
       ' Test to see if there is a copy of Microsoft Excel already running.
       On Error Resume Next   ' Defer error trapping.
       ' Getobject function called without the first argument returns a
       ' reference to an instance of the application. 
       ' If the application is not running, an error occurs.
       MyXL = GetObject(, "Excel.Application")
       If Err().Number <> 0 Then ExcelWasNotRunning = True
       Err().Clear() ' Clear Err object in case error occurred.
     
       ' Check for Microsoft Excel. If Microsoft Excel is running,
       ' enter it into the Running Object table.
       DetectExcel()
     
       ' Set the object variable to reference the file you want to see.
       MyXL = GetObject("c:\vb\TEST.XLS")
     
       ' Show Microsoft Excel through its Application property. Then
       ' show the actual window containing the file using the Windows
       ' collection of the MyXL object reference.
       MyXL.Application.Visible = True
       MyXL.Parent.Windows(1).Visible = True
       '  Do manipulations of your  file here.
       '
    End Sub
     
    Sub DetectExcel()
       ' Procedure dectects a running Excel and registers it.
       Const WM_USER = 1024
       Dim hWnd As Long
       ' If Excel is running this API call returns its handle.
       hWnd = FindWindow("XLMAIN", 0)
       If hWnd = 0 Then   ' 0 means Excel not running.
          Exit Sub
       Else
          ' Excel is running so use the SendMessage API
          ' function to enter it in the Running Object Table.
          SendMessage(hWnd, WM_USER + 18, 0, 0)
       End If
    End Sub
    Surtout que je ne sais pas si tout ceci sera compatible sur le serveur Intranet.

  3. #3
    Courgette17
    Invité(e)
    Par défaut
    Je continue mes recherches, je suis sur que cela pourra servir à quelqu'un ce que je cherche, un jour, ou même pour le mettre dans la FAQ.

    J'ai trouvé ce topic pour le VB:
    http://www.developpez.net/forums/showthread.php?t=1306

    J'ai essayé de l'adapter chez moi, ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Try
    xlapp = GetObject(, "My.Excel9.Interop.Application")
    lbl1.Text = "Application existante"
    ExcelRun = True
    Catch ex As Exception
    ExcelRun = False
    lbl1.Text = "Nouvelle Application"
    xlapp = New My.Excel9.Interop.Application
    End Try
    Mais il passe toujours par le Catch. Il arrive pas à faire le Get Object. Je n'ai pas essayé le On Error Resume Next parce que ce n'est pas une fonction recommandée en VB.net d'après ce que j'en ai lu et il faudrait que je n'ai pas de Try Catch Finally, chose un peu dur à réaliser dans mon code.

    Comment puis je faire pour qu'il récupère l'Excel déja ouvert à l'aide du code ci-dessus?

Discussions similaires

  1. Réponses: 12
    Dernier message: 19/06/2007, 10h24
  2. Piloter une macro/Excel depuis une application VB
    Par pjbou dans le forum Windows Forms
    Réponses: 1
    Dernier message: 24/04/2007, 16h01
  3. Lancer une application à partir d'une application précise.
    Par Faith's Fall dans le forum C++Builder
    Réponses: 2
    Dernier message: 16/01/2007, 18h08
  4. Réponses: 7
    Dernier message: 01/02/2006, 15h49
  5. [Excel] Utiliser une application externe par une macro
    Par thierry2.dlp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2005, 22h07

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