[PERL] OLE Problem

  • Hallo Leute,

    ich habe ein Problem mit dem Plugin "OLE", mit dem ich das Öffnen einer Exceldatei realisieren möchte. Hier ist mein bisheriger Code:

    PHP
    $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application');
    	$Excel->{'Visible'} = 1;
        $Book = $Excel->Workbooks->Open ($localDB . '\\' . $warningDBName);
    
    	sleep(5);
    	$Excel->Quit();

    Jetzt möchte ich aber nicht, dass mein Perlskript Excel schließt, sondern ich in einer Schleife warte bis der Anwender die Exceldatei selbst schließt.

    Heißt ich möchte überprüfen ob die Datei in der Variable "$Book" geöffnet ist oder geschlossen wurde. Etwas in der Art wie $Book->Opened.

    Kann mir jemand helfen?

    Gruß Tarlar

  • Also ich habe keine Ahnung von Perl, noch nie damit gearbeitet.
    Aber das läuft ja auch serverseitig? Und die Excel-Datei ist clientseitig geöffnet?
    Dann brauchst du eine Ajax-Lösung.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Halt, das Perl Skript läuft nicht auf einem Server, sondern lokal auf dem Rechner!
    Das Öffnen der Exceldatei funktioniert ja wunderbar. Nur ich kenne leider den Befehl nicht, mit dem ich überprüfen kann ob die Arbeitsmappe NOCH geöffnet ist.

  • Perl ist eine clientseitige Scriptsprache? Das wäre mir neu. Auch wenn du das lokal per Xampp laufen hast gibt es weiterhin die Differenzierung zwischen Client und Server.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Fakt ist, dass es keine Problem gibt.

    Ich benutze das, extra von Microsoft zu Verfügung gestellte, Plugin OLE (Object Linking and Embedding). Damit kann man Programme, die mit OLE zusammenarbeiten, steuern. Zu diesen Programmen gehört unter anderem Excel.

    Alles was ich brauche ist die Funktion innerhalb dieses Plugins, dessen Rückgabewert mir verrät, ob die Datei geöffnet ist oder nicht.

  • Meines Erachtens ist das nicht möglich, auch ohne Ahnung von PERL oder OLE zu haben.
    Es reicht die Tatsache, das PERL serverseitig läuft und du eine Überprüfung von etwas vornehmen möchtest was clientseitig läuft. Das kann nur mit Ajax funktionieren.

    Client schickt request an Server.
    Server generiert über PERL/OLE Excel-Sheet und schickt es an den Client zurück.
    Client empfängt Excel-Sheet.

    Ab da findet ohne neuen Request keine Kommunikation mehr zwischen Client und Server statt. PERL läuft auf dem Server, das Excel-Sheet ist auf dem Client geöffnet.
    Du benötigst auf jedenfall einen neuen Request an den Server um Änderungen die client-seitig im Excel-Sheet vorgenommen werden mit PERL/OLE zu verarbeiten.
    Ob dieser Request jetzt durch Ajax vorgenommen wird oder durch einen neuen Seitenaufruf spielt keine Rolle, aber ohne Request an den Server können PERL und OLE nichts machen.
    Ka ob man clientseitig beim schließen des Excel-Sheets irgendwie ein Request an den Server auslösen kann, aber wie gesagt, ohne Request können PERL und OLE nichts machen.

    Aus diesem Grund wird es wohl auch keinen Befehl geben um zu überprüfen ob das Excel-Sheet noch geöffnet wird. Es besteht keine persistente Verbindung zwischen Client und Server, der Befehl wäre also sinnlos. In dem Moment wo dein Perl-Script durchgelaufen ist werden die Ergebnisse an den Client geschickt und auf dem Server passiert nichts mehr bis ein neuer Request eingeht.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook