Domino 9 und frühere Versionen > ND9: Entwicklung
LotusScript und EXCEL-Objekt
aoibhneach:
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
--- Ende Code ---
Ralf_B:
Funktioniert bei mir ohne Probleme ..... mit :
xcl.Application.quit
Bitte mal probieren.
Gruß
Ralf
jBubbleBoy:
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.
aoibhneach:
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.
jBubbleBoy:
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
--- Ende Code ---
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln