Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Word schliessen geht nicht (https://www.delphipraxis.net/75164-word-schliessen-geht-nicht.html)

binio 15. Aug 2006 11:13


Word schliessen geht nicht
 
Hallo


habe das Problem das wenn ich CreateOleObject('word.application'); auffrufe um von Word den Pfad von den Vorlagen zu erfahren im Hintergund immer WinWord gestartet wird und es mir verweigert *.dot Daten im Vorlagenverzeichnis zu löschen.
Wenn ich im Tast Manager nachgucke ist WinWord gestartet und ich kann nichtmal im Explorer *.dot Daten löschen. Nun gibt es 3 möglichkeiten.
Einmal den Pfad anders herausbekommen(kenne leider keine andere)
Oder winword zu schliessen von Delphi aus.(Ich habs mit word.quit(....);versucht jedoch bekomm ich immer "variante referenziert keine automatisierungsobjekte" aus den Bildschirm)
Oder Windows zu Zwingen die test.dot zu löschen egal welche sicherheitsprobleme das gibt. (weiss nicht ob diese Idee realisierbar ist)

Kann mir da bitte einer helfen?
Sitze schon 2 Tage an den Problem.


Robert

omata 15. Aug 2006 16:38

Re: Word schliessen geht nicht
 
Hallo binio,

Zitat:

Zitat von binio
habe das Problem das wenn ich CreateOleObject('word.application'); auffrufe um von Word den Pfad von den Vorlagen zu erfahren im Hintergund immer WinWord gestartet wird und es mir verweigert *.dot Daten im Vorlagenverzeichnis zu löschen.

was meinst du macht CreateOleObject('word.application');? Es öffnet Word, also ist doch klar das das dann im Hintergrund läuft. Das du dann keinen Zugriff auf bestimmte (geladenene) *.dot Dateien hast ist auch klar, du kannst keine geöffneten Dateien löschen. Das ist allgemein unter Windows so.

Ich habe noch nicht so ganz verstanden was du eigentlich vorhast...

Zugriff über CreateOleObject:
Delphi-Quellcode:
uses ComObj;

function GetVorlagenPfad:string;
var Word:OleVariant;
begin
  Word:=CreateOleObject('word.application');
  try
    Result:=Word.Options.DefaultFilePath[2];
  finally
    Word.Quit;
  end;
end;
Ich weiss nicht ob bei der PE auch der Server-Komponenten-Reiter vorhanden ist. Dort gibt es eine TWordApplication-Komponente.

Zugriff über TWordApplication:
Delphi-Quellcode:
uses WordXP; // kann eventuell auch anders heissen

function GetVorlagenPfad:string;
var Word:TWordApplication;
begin
  Word:=TWordApplication.Create(Self);
  try
    Word.Connect;
    Result:=Word.Options.DefaultFilePath[wdUserTemplatesPath];
  finally
    Word.Disconnect;
    Word.Quit;
    Word.free;
  end;
end;
Der Vorteil wenn du über TWordApplication gehen kannst ist, dass die Word-Konstanten in Delphi definiert sind und du so wesentlich leichter an die Kontentenwerte rankommst.

Gruss
Thorsten

Jelly 15. Aug 2006 16:46

Re: Word schliessen geht nicht
 
Um Word wieder zu schliessen, empfiehlt MS folgendes:

Delphi-Quellcode:
Word.NormalTemplate.Saved := true ;    // MS Knowledgebase article 285885
Word.Activedocument.Close (SaveChanges := false) ;
Word.Quit ;
Damit sollte sich zumindest das Problem mit dem Template lösen.

binio 15. Aug 2006 17:07

Re: Word schliessen geht nicht
 
Ich ermittle mit:


Delphi-Quellcode:
....
var
  Word: Variant;
  s: String

....
word:=CreateOleObject('word.Application');
s:=word.Startuppath;
word:Unassigned;
....
das Vorlagen verzeichniss von Word. Nur dummerweise wird Word auch geöffnet und ich dann keine Vorlagen mehr löschen weil ich Word in der Task laufen habe und es mir jeglichen zugriff auf Vorlagen verweigert :(
Da ich nun erfahren habe das ich diese nicht löschen kann wenn Word offen ist muss ich es hinbekommen das word beendet wird.

omata 15. Aug 2006 17:16

Re: Word schliessen geht nicht
 
Hast du mal meinen Code ausprobiert? Dort wird Word doch gleich wieder beendet.

binio 15. Aug 2006 17:39

Re: Word schliessen geht nicht
 
Ich hab deine Lösung getestet an mein Rechner.
Sie klappt wunderbar. Ich muss es nur morgen am ganzen Project einbinden.
Gerade ist keiner mehr im Büro aber ich bin zuversichtlich das es klappen wird.

Ich danke euch Omata und Jelly


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz