Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Davidxx am 25.01.10 - 09:46:52
Titel: Rich Text Feld als Word Object Quelldokument
Beitrag von: Davidxx am 25.01.10 - 09:46:52
Guten Morgen zusammen, die Woche beginnt direkt mit einer Frage meinerseits :)
Folgendes Problem habe ich aktuell:
Ich habe eine Datenbank erstellt, in der ich mir verschiedene Dokumente nach Words exportiere. Die ganze Formatierung geschieht mit Hilfe einer Word Vorlage (nicht per Script da auch Bilder usw. in der Vorlage vorkommen)
Das alles funktioniert prima, vorausgesetzt man hat die Vorlage im richtigen Ordner.
Jetzt ist die Anforderung, dass der Benutzer der Datenbank nicht per Hand diese Vorlage (die ich in einer Page in der Datenbank als Attachment eingefügt hab) in das richtige Verzeichnis kopiert. - Das Verzeichnis variiert außerdem zwischen unterschiedlichen Word / Windows Versionen.
Das Problem mit Registry auslesen usw. zu lösen scheint mir auch fast unmöglich, da auch hier die Pfade variieren.
Meine aktuelle Idee zur einfachen und perfekten Lösung ist jetzt folgendes:
Set wordObj = CreateObject("Word.Application") wordObj.visible = True Call wordObj.Documents.Add("VorlageLösungskatalog.dot") <-- anstatt den Dateinamen anzugeben einfach auf das Dokument innerhalb der Datenbank verweisen.
Ist es möglich direkt auf das Dokument zu verweisen und damit das Word Object zu erstellen?
Alternative Lösungsvorschläge nehme ich auch gerne entgegen.
Gruß David
Edit: Die Überschrift lautet Rich Text Feld... da ich zuerst dachte man würde das Vorlagedokument am besten als Quelle aus einem Rich Text Feld nehmen.
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: ascabg am 25.01.10 - 10:04:27
Hallo,
Zitat
Ist es möglich direkt auf das Dokument zu verweisen und damit das Word Object zu erstellen?
Ist glaube ich nicht moeglich.
Aber warum bindest Du die Vorlage nicht in ein (Konfig-)Dokument in der Db ein. Nun pruefts Du, ob der aktuelle Anwender die Vorlage in dem entsprechenden Verzeichnis hat. Wenn nicht, dann kannst Du, auch mittels Script, die Datei (Vorlage) in das entsprechende Verzeichnis aus dem Konfigdokument extrahieren und anschliessend weiterverwenden.
Andreas
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: Davidxx am 25.01.10 - 10:09:13
Danke für die Antwort,
theoretisch würde ich dir da zustimmen, das wäre auch nicht wirklich schwer. Aber wie oben schon beschrieben ist mir nicht bekannt wie das Vorlageverzeichniss des aktuellen Nutzers ist.
Das steht nichtmal eindeutig in der Registry, zumindest wenn ich korrekt gesucht habe.
Gruß David
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: ascabg am 25.01.10 - 10:19:12
Ich stelle mal noch folgende Frage.
Was definierts Du in deinem Fall als das Vorlagenverzeichnis des Benutzers? Das was Du in den Einstellungen in Word treffen kannst? (Arbeitsgruppenvorlagen, Benutzervorlagen)
Andreas
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: Davidxx am 25.01.10 - 10:26:21
Also das Verzeichnis in dem Notes standardmäßig nachguckt um die Vorlage zu finden habe ich in der Registry gesucht aber nicht finden können: D:\Dokumente und Einstellungen\DRezman\Anwendungsdaten\Microsoft\Vorlagen
Nur daraus hat er die Vorlagen bisher verwendet.
Das sind die Benutzervorlagen in Word.
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: ascabg am 25.01.10 - 10:31:19
Die Verzeichnisse der Vorlagen, die in den Optionen hinterlegt sind, solltest Du eigentlich ueber das Application-Object herausbekommen.
Somit bekommt man das Verzeichnis, welches als Verzeichnis fuer dei Benutzervorlagen definiert ist.
Andreas
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: Davidxx am 25.01.10 - 11:19:12
Ah super Tipp, danke.
Allerdings gibt er mir jetzt "D:Daten/Eigene Dateien" wieder, was ja nicht stimmt. Das ist der korrekte Pfad wenn es um normale Dokumente geht, aber nicht für Vorlagen.
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: ascabg am 25.01.10 - 11:30:10
Kannst Du mal den betreffenden Code (anonymisiert natuerlich) hier posten?
Andreas
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: Davidxx am 25.01.10 - 12:26:49
klar:
'15.01.2010 DvR Sub Click(Source As Button)
On Error Goto err_handler
Dim oSession As New NotesSession Dim ouiwks As New NotesUIWorkspace Dim oUIDoc As NotesUIDocument Dim dc As NotesDocumentCollection Dim oDb As NotesDatabase Dim oView As NotesView Dim strSuchbegriff As String Dim oDoc As NotesDocument Dim ocolSearch As notesdocumentcollection Dim vReturn As Variant Dim sReturn As String Dim vResult As Variant Dim vSchlagwortliste As Variant Dim vListe As Variant Dim sjoin As String Dim listOfViewNames As String Dim selected_viewname As String Dim oRTItemBody As NotesRichTextItem
Set oDb = oSession.CurrentDatabase Set dc = oDb.AllDocuments Set oDoc = dc.GetFirstDocument
'Dim wsh As Variant 'Set wsh = CreateObject("WScript.Shell")
Dim strUserVorlagen As String Set Application = CreateObject("Word.Application")
'Erfassen der Suchworte Dim squery As String squery = |@Sort(@Unique(@DbColumn("";"";"Lösungskatalog";1)))| vSchlagwortliste = Evaluate(squery)
Dim vUserChosenSearchKeys As Variant vUserChosenSearchKeys = ouiwks.Prompt(7, "Auswahl","Bitte Schlagworte auswählen", vSchlagwortliste(0),vSchlagwortliste)
Dim ocolAllResults As notesdocumentcollection Dim ovwToSearchIn As notesview Dim ocoltmp As notesdocumentcollection Dim odoctmp As notesdocument
Set ovwToSearchIn = odb.getview("Lösungskatalog") Set ocolAllResults = ovwToSearchIn.getalldocumentsbykey ("~~~~~~~~~~",True)
'Maske Lösungskatalog erstellen Set oDocLoesung = New NotesDocument(oSession.CurrentDatabase)
oDocLoesung.Form="Lösungskatalog"
If oDocLoesung.HasItem("Body") Then Call oDocLoesung.RemoveItem("Body") Set oRTItemBody = New NotesRichTextItem( oDocLoesung, "Body" )
Forall search_key In vUserChosenSearchKeys Set ocoltmp = ovwToSearchIn.getalldocumentsbykey(search_key) If ocoltmp.count > 0 Then Set odoctmp = ocoltmp.getfirstdocument While Not odoctmp Is Nothing Call ocolAllResults.addDocument(odoctmp) Set odoctmp = ocoltmp.getnextdocument(odoctmp) Wend End If Set ocoltmp = Nothing End Forall
' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'ocolAllResults schleife (1 bis n) - aus Dokument die Feldwerte ziehen, Feld fldInhalt + Feldwerte aus maske "Lösungskatalog" Dim varSchlagworte As Variant Dim varKurzbez As Variant Dim varKunde As Variant Dim varProjekttitel As Variant Dim varKurzbeschreibung As Variant Dim oDocResult As NotesDocument Dim richStyle As NotesRichTextStyle Set richStyle = oSession.CreateRichTextStyle Set oDocResult = ocolAllResults.GetFirstDocument
'Word Dokument wird erstellt Dim wordObj As Variant Dim rtItem As NotesRichTextItem Dim gesamtText As Variant
gesamtText = oRTItemBody.GetUnformattedText ' gesamtText = oRTItemBody.GetFormattedText(False,80) Set wordObj = CreateObject("Word.Application") wordObj.visible = True Call wordObj.Documents.Add("VorlageLösungskatalog.dot") Set wordDoc = wordObj.ActiveDocument
While Not oDocResult Is Nothing varKurzbez = oDocResult.GetItemValue("Kurzbez") varKunde = oDocResult.GetItemValue("Kunde") varProjekttitel = oDocResult.GetItemValue("Projekttitel") varKurzbeschreibung = oDocResult.GetItemValue("fldKurzbeschreibung")
richStyle.Bold = True 'Zur Erkennung das es sich um eine Überschrift handelt
'nächstes Dokument Set oDocResult = ocolAllResults.GetNextDocument(oDocResult) wordObj.Selection.TypeText "___________________________________________________________________ "+Chr(10)+Chr(10) Wend
'Text in das Word Dokument schreiben With wordObj.Selection .TypeText(gesamtText) End With
Exit Sub
err_handler: 'catch the "document is already in collection error and resume next Msgbox Error$ & " (" & Err & ")" & " in Zeile " & Str(Erl) If Err=4469 Then Resume Next Exit Sub End Sub
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: ascabg am 25.01.10 - 12:32:54
Frage.
Die von der Funktion benoetigte Konstante wdUserTemplatesPath ist aber in Deinem Code schon definiert? Es handelt sich hierbei um eine VBA-Konstante, die es in der Form nicht in LN gibt.
Andreas
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: Davidxx am 25.01.10 - 12:54:24
Oh ok, das wusste ich jetzt nicht. Dachte das wäre Lotus Script Code, nen parameter von dem Object.
Hab keine Ahnung von VBA.
Gruß David
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: ascabg am 25.01.10 - 13:21:52
Oeffne mal WORD. Dann die Tastenkombination Alt + F11. Hier bist Du nun im VBA-Editor. Nun noch die Taste F2 und Du hast den Objektkatalog vor Dir.
Hier findest Du alle VBA-Objekte, deren Methoden und die Konstanten
Im Script selbst kannst du dann wdUserTemplatesPath und wdWorkgroupTemplatesPath verwenden.
Axel
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: ata am 25.01.10 - 13:34:51
... entweder die Konstanten deklarieren oder die Werte direkt verwenden...
Toni
EDIT: Axel war schneller
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: Davidxx am 25.01.10 - 13:47:45
Ja Klasse, danke euch ;)
Ging ja doch noch einfacher als erwartet :)
Auch wenn ich nich so 100% durchblicke wie genau das mit Const wdUserTemplatesPath = 2 Const wdWorkgroupTemplatesPath = 3 funktioniert.
Sprich die logik dahinter, wie er erkennt das es sich um Word handelt usw.
Trotzdem Danke an alle ;)
Gruß
Titel: Re: Rich Text Feld als Word Object Quelldokument
Beitrag von: ata am 25.01.10 - 13:51:03
... er erkennt es nicht - er verwendet den Wert der Konstanten - und die können heißen wie sie wollen. In deinem Fall hast du sie aus dem Makro übernommen und deklarierst sie eben bei dir. Du könntest sie auch umbenennen...