Laden...

Word starten uns Skript ausführen

Erstellt von olimlad vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.779 Views
O
olimlad Themenstarter:in
106 Beiträge seit 2004
vor 18 Jahren
Word starten uns Skript ausführen

Hallo,

ich bin gerade dabei über ein Programm Word im Hintergrund zu starten und das im Word Dokument enthaltene Skript automatisch auszuführen.

Meine Frage jetzt wie mache ich das?


// Instanz von Word erzeugen
				Word.ApplicationClass m_oWordAnwd = new Word.ApplicationClass();
				m_oWordAnwd.Visible = true;

				object m_nurlesen = false;
				object m_sichtbar = true;
				object  m_leer = System.Reflection.Missing.Value;
				object m_dokname = m_datei; 

				Word.Document m_oDokument = m_oWordAnwd.Documents.Open(ref m_dokname, ref m_leer, ref m_nurlesen, 
											ref m_leer,ref m_leer,ref m_leer,ref m_leer,ref m_leer,ref m_leer,
											ref m_leer,ref m_leer, ref m_sichtbar, ref m_leer, ref m_leer, ref m_leer);

				
				
				m_oDokument.Activate();

Wenn ich das Dokuemen Sichtbar mahce und Word dann klappt alles. Aber ich möchte das das im Hintergrund läuft und der Anwender nichts mitbekommt. Ist das möglich?

MFG

Oli

3.728 Beiträge seit 2005
vor 18 Jahren
Unsichtbar

Du musst einfach

m_oWordAnwd.Visible=false;

setzen. Dann ist Word unsichtbar.

Die Activate-Methode solltest Du am Ende dann allerdings nicht aufrufen.

Du musst allerdings bedenken, dass der gestartete Prozess WINWORD.EXE im Hauptspeicher verweilt. Da der Benutzer von dem heimlichen Word-Prozess nichts sieht, kann er Word auch nicht schließen (Über den Task-Manager natürlich schon). Wenn Du Deinen Code ein zweites mal ausführst, wird ein zweiter WINWORD.EXE Prozess unsichtbar gestartet, usw.. Irgendwann ist der Hauptspeicher dicht. Du musst Dich auf jeden Fall auch im die zerstörung der erzeugten Prozesse kümmern. Word ist eine COM-Anwendung. Das bedeutet, dass der .NET Garbage Collector die Word-Instanzen nicht abräumt! Außerdem laufen die in separaten Prozessen und nicht im Prozess Deiner Anwendung, wie normale COM-DLL-Aufrufe.

Wenn Deine Anwendung stabil und sauber sein soll, musst Du Dir Gedanken machen, wie Du die erstellen WINWORD.EXE Prozesse wieder los wirst. Und vor allem zu welchem Zeitpunkt.

Warum in aller Welt willst Du aber ein Word Dokument unsichtbar öffnen?

Das wird normalerweise nur kurzzeitig gemacht, um die Ausführungsgeschwidigkeit bei der Automatisierung von Word zu erhöhen. Wenn man z.B. ein komplexes Word-Dokument aus einer eigenen Anwendung heraus erstellt. Man zeigt das Dokument erst dann an, wenn es fertig generiert ist. In diesem Fall kann der Benutzer Word einfach über den "X" Button schließen. In jedem Fall sollten alle Objektvariablen auf Word-Instanzen mit System.Runtime.InteropServices.Marshal.ReleaseCOMObject(Objektvariable) freigegeben werden, sobald sie von der eigenen Anwendung nicht mehr benötigt werden.