Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: aoibhneach am 08.07.22 - 13:27:30

Titel: LotusScript und EXCEL-Objekt
Beitrag von: aoibhneach am 08.07.22 - 13:27:30
Hallo Forum,

Ich schreibe über Lotus Script viele Daten in EXCEL-Dateien. Das sieht zunächst alles sehr gut aus. Die für den EXCEL-Export relevanten Zeilen aus meinem Agenten habe ich angehängt.

Das Schreiben der EXCEL-Dateien geschieht rekursiv über eine Schleife, da sich unter jedem "Hauptdokument" viele Response-Dokumente und hierarchisch darunter weitere Response-Dokumente befinden.

Jedoch habe ich den Grund dafür nicht gefunden, warum beim Öffnen einer der neuen EXCEL-Dateien regelmäßig, aber nicht immer, eine zweite EXCEL-Datei geöffnet wird. Es sieht so aus, als wäre es ein EXCEL-Dokument der Art der zuletzt gespeicherten Schablone.

Ist eventuell immer noch ein EXCEL-Objekt geöffnet oder aktiv, obwohl der Agent beendet ist?

Gibt es "noch einen" Befehl zum definitiven Löschen eines EXCEL-Objekts? Ich nahm an, dass mit "xcl.workbooks.Close" und "xcl.Quit" alles "erledigt" sei.
Diese beiden Kommandos führt der Agent nach dem Schreiben jeder Datei aus.

Genügen diese Informationen für eine Idee?

Ich "forsche" nebenbei weiter.

Vielen Dank und Grüße,

Nils


Code
Dim xcl As Variant
Dim sht As Variant
dim filename as string

Set xcl = createobject("Excel.Application") 

xcl.workbooks.Add("D:\EXCEL_Templates\"+ "Template.xlt")  

Set sht = xcl.worksheets(1)

fileName = "D:\EXCEL_Daten\" & dateiname & ".xlsx" 

'Schreiben der Daten
sht.Range("C3") = "...."
sht.Range("C4") = "...."
u.s.w.

sht.SaveAs(fileName)

xcl.workbooks.Close
xcl.Quit

Titel: Antw:LotusScript und EXCEL-Objekt
Beitrag von: Ralf_B am 08.07.22 - 15:27:47
Funktioniert bei mir ohne Probleme .....   mit :
xcl.Application.quit
Bitte mal probieren.

Gruß
Ralf
Titel: Antw:LotusScript und EXCEL-Objekt
Beitrag von: jBubbleBoy am 08.07.22 - 16:21:43
Excel-Application kann sich selber beliebig tief verschachtelt aufrufen: https://docs.microsoft.com/de-de/office/vba/api/excel.application.application
Ich würde im 1. Schritt mit getObject() versuchen eine bestehende Excel-Instanz zu holen bevor eine neue erstellt wird und mit xcl.Visible=True dafür sorgen das diese auch sichtbar ist.
Titel: Antw:LotusScript und EXCEL-Objekt
Beitrag von: aoibhneach am 08.07.22 - 21:52:09
Guten Abend,

Vielen Dank. Auch bei Verwenden dieses Kommandos ist es jedoch so, dass  - auch nach Beenden des Clients und des Designers - beim Öffnen irgendeiner der erzeugten EXCEL-Dateien, ein weiteres EXCEL-Fenster parallel geöffnet wird. Diese zusätzliche EXCEL-Datei ist nicht gespeichert und der Dateiname dieser Datei wird bei jedem Öffnen einer erstellten EXCEL-Datei hochgezählt: "name1.xlsx" ... , beim nächsten Mal "name2.xlsx" u.s.w.

Aber: Nach einiger Zeit (Minuten) und beendetem Agenten passiert das nicht mehr. Dann wird nur die ursprüngliche EXCEL-Datei in einem nun Bildschirm füllenden Fenster geöffnet. Eine weitere Datei öffnet sich nicht mehr.

Könnte es sein, dass erst dann das Application-Object gelöscht wurde? Notes ist weiterhin geöffnet.

Die EXCEL-Arbeitsblätter werden übrigens durch den Agent nur erstellt. Das ".Visible" werde ich nicht benötigen, oder? "getObject()" werde ich testen.

Nochmals vielen Dank.


Titel: Antw:LotusScript und EXCEL-Objekt
Beitrag von: jBubbleBoy am 09.07.22 - 09:28:17
Schon mal geprüft ob Excel-Markos beim Öffnen einer Datei ausgeführt werden?
Und passiert das auch, wenn eine leere Datei ohne Vorlage gespeichert wird?
Deine Beschreibung kann ich so nicht nachvollziehen, aber man könnte noch über WMI einfach alle Excel-Prozesse killen, vielleicht hilft das ja :-:
Code
Dim wmi, pList
Set wmi= GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set pList = wmi.ExecQuery("Select * from Win32_Process Where Name = 'excel.exe'")
ForAll p In pList
	p.terminate
End ForAll
Titel: Antw:LotusScript und EXCEL-Objekt
Beitrag von: aoibhneach am 14.07.22 - 09:58:59
Hallo Erik,

Danke für Deine Antwort. Sooo tief stecke ich leider nicht in der Materie.

Nach dem Schreiben der Dateien sind alle so, wie ich sie mir wünsche. Nur dass eben immer eine weitere geöffnet wird.
Mir ist aber aufgefallen, dass beim Runterfahren des Rechners immer auf eine noch geöffnete EXCEL-Anwendung hingewiesen wird.
Welches Objekt(?) da aber noch im Speicher hängt, kann ich mir nicht erklären.

Ich forsche weiter.

Ich möchte nur nicht, dass der Eindruck entsteht, ich ließe den Thread voller Undankbarkeit versumpfen  ;)

Falls es nach dem Finden einer Lösung  ???  noch geht, stelle ich dies hier ein.

Viele Grüße
Titel: Antw:LotusScript und EXCEL-Objekt
Beitrag von: aoibhneach am 18.07.22 - 15:38:53
Hallo Forum,

Es scheint, als dass das Phänomen des parallelen Öffnens mehrerer Excel-Dateien dann auftritt, wenn der Agent im "Debug"-Modus gelaufen war.

Ohne "Debug" scheint jetzt alles in Ordnung zu sein. ("W'steiner alkoholfrei"-Smiley  ;))

Viele Grüße.
Titel: Antw:LotusScript und EXCEL-Objekt
Beitrag von: aoibhneach am 13.10.22 - 09:08:59
Hallo,

Oh Mann; heute Nacht (!!!) kam mir plötzlich die Idee, warum das Geschilderte mit den doppelten EXCEL-Fenstern passiert.

Im Agenten habe ich zwar dafür gesorgt, dass die EXCEL-Application beendet und die Workbooks etc. geschlossen werden. Aber bei einem Programmabbruch  (wegen Fehlers oder während des "Debug") kommt der Agent ja nicht an diese Stelle. Im Taskmanager tummelten sich dann natürlich einige EXCEL-Icons.

Das Beenden der EXCEL Application und das Schließen von Workbooks müssen auch in das "Terminate"-Event des Agenten muss. Nun wird EXCEL immer sicher beendet.
Das war ein Pappgroschen mit Fallschirm.   ::)

Ein nicht mehr ganz taufrischer Thread. Aber ich hoffe, es ist ok

Viele Grüße,

Nils