Geschrieben von: Herbert Hahn
Kategorie: ASP Tricks
This printed page brought to you by AlphaSierraPapa
Wer hat es noch nicht erlebt: Man hat auf einer Intranetseite einen Link auf eine Worddatei (*.doc oder *.dot). Wenn man diesen Link anklickt, dann wird Word direkt im Browserfenster geöffnet. Da hilft es auch nicht, das target als "_blank" vorzugeben, da dies dann den gleichen Effekt im neuen Browserfenster hat. Ein Weg, wie man ganz gemütlich Word 2000 als eigenständiges Programm öffnet und dann auch noch die Datei richtig öffnet ist über ein kleines clientseitiges Script (mit serverseitiger Hilfe, ist ja klar). Der Nachteil allerdings ist der, daß man die Berechtigungen für die lokalen Intranetsites beim IE korrekt konfigurieren muß.
So richtig "gestolpert" bin ich über das Problem als ich firmeninterne Wordvorlagen (Dateiendung .dot) im Intranet veröffentlichen wollte. So intelligent das automatische Anzeigen eines Worddokuments im Browser auch sein mag, um so störender ist es wenn man diese Worddatei zum Editieren öffnen will.
Wie bereits angekündigt, man muß den Internet Explorer etwas umkonfigurieren. Das geht folgendermaßen vonstatten: Unter Extras / Internetoptionen auf Sicherheit gehen,
und dort dann auf Sites... klicken und die neue vertrauenswürdige Site einfügen (in diesem Beispiel ist es sw1):
Ein weiterer Schritt ist im Tab Sicherheit noch zu erledigen - die Sicherheitsstufe muß angepasst werden ("Stufe Anpassen"):
Mit diesen Einstellungen ("sehr niedrig") kann man die Seite mit dem clientseitigen Script dann korrekt aufrufen.
Das Hauptproblem ist in unserem Fall wie man am Client Word startet, und zwar eigenständig, und nicht im Browser. Dazu habe ich ein clientseitiges (IE-only) Script geschrieben, und die Funktion heißt sinnvollerweise load_word:
<script Language=VBScript> function load_word(mode, pfad) 'mode 0 = normal document open 'mode 1 = open as document template
Die Funktion nimmt zwei Parameter entgegen: mode bestimmt, ob wir ein normales Worddokument oder eine Vorlage für ein neues Dokument erhalten, und pfad natürlich den Pfad zur zu öffnenden Datei.
Set appWord = CreateObject("Word.Application") appWord.WindowState = 0 appWord.Height = 600 appWord.Width = 800 appWord.Left = 40 appWord.Top = 20 appWord.Visible = True ' Display the application.
Danach öffnen wir die Word Applikation. Mit den Parametern height, width usw bestimmen wir die Größe und den Erscheinungsort des Fensters.
' Open the document. ' mode 1 = dot file, 0 = docfile If mode = 1 Then appWord.Documents.Add (pfad) If mode = 0 Then appWord.Documents.Open (pfad)
Hier wird - abhängig ob Vorlage oder Dokument - ein Dokument nach Vorlage erstellt oder einfach geöffnet. Der Unterschied ist die Verwendung der Add und Open Methoden.
' Close the object variable. Set appWord = Nothing end function </Script>
Und zum Schluß wird noch aufgeräumt.
Sinnvollerweise bettet man das clientseitige Script in die Downloadseite für Dokumente und Vorlagen ein. Dort kann man dann die Links dynamisch generieren (zB wenn die Dokumente in der Datenbank verwaltet werden).
Das folgende Codebeispiel (wordopen.asp) stammt aus einem Projekt das geringe Anforderungen (Speicherung der Dokumente auf Netzwerkshares) hat. Die Variable URL hält den gesamten Pfad der Datei, inklusive Filenamen. Das sähe also zb so aus:
\\Server\Freigabe\Pfad\file.doc
Natürlich funktioniert auch
H:\ Pfad\file.doc
Allerdings muß in diesem Fall auf allen Rechner das gleiche Laufwerkmapping eingestellt sein. Das Beispiel in wordopen.asp generiert einen Link sowohl für ein Template als auch ein Dokument, die beide auf einem Netzwerkshare liegen, das mittels UNC Pfad angesprochen wird:
<% Pfad = "\\Sw1\www\softwing\wordopen\" dot="meinFile.dot" doc="meinFile.doc" url1 = pfad & dot url2 = pfad & doc %> <table width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td width="25%">Wordopen Demo</td> <td width="27%">1. DOT:</td> <td width="48%"> <input type=image onClick="load_word '1', '<% = Url1 %>'" src="./disk.gif" name="image"> </td> </tr> <tr> <td width="25%"> </td> <td width="27%">2. DOC:</td> <td width="48%"> <input type=image onClick="load_word '0', '<% = Url2 %>'" src="./disk.gif" name="image2"> </td> </tr> <tr> <td width="25%"> </td> <td width="27%"> </td> <td width="48%"> </td> </tr></table>
Im Ereignis "onClick" rufen wir das clientseitige Script auf. Und siehe da, Word läßt sich ohne weiteres öffnen und sogar korrekt mit Dokumentvorlagen beschicken. Diese werden nun als Dokument mit der angegebenen Vorlage als "Dokument1" geöffnet.
Der Vollständigkeit wegen sei hier noch angemerkt, daß es sehr klug ist wenn man an dieser Stelle noch mittels FileSystemObject prüft, ob es die entsprechende Datei (Vorlage oder Dokument) am Server auch wirklich gibt.
Wenn Sie mit diesen Codefragmenten experimentieren, dann überzeugen Sie sich gelegentlich ob in Ihrem System nicht unzählige Word-Tasks laufen. Sollte es nämlich passieren daß die Funktion word_open mit dem Fehler daß die Datei nicht existiert terminiert, bleibt die Wordinstanz einfach stehen. So geschehen bei mir, nach längerem experimentieren.
Wer nun auf die Idee kommt das gezeigte auch mit Excel-Dateien zu probieren wird schnell merken, daß Excel diesbezüglich seine eigenen Wege geht. Dazu mehr im nächsten Artikel.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20020122.zip
Mit ASP ein Word Dokument am Server generieren
http:/www.aspheute.com/artikel/20010319.htm
Serverdaten clientseitig in Exceltemplates importieren
http:/www.aspheute.com/artikel/20020128.htm
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.