Autor Thema: Rich Text Feld als Word Object Quelldokument  (Gelesen 4759 mal)

Offline Davidxx

  • Junior Mitglied
  • **
  • Beiträge: 56
Rich Text Feld als Word Object Quelldokument
« 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.
« Letzte Änderung: 25.01.10 - 10:01:46 von Davidxx »

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #1 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

Offline Davidxx

  • Junior Mitglied
  • **
  • Beiträge: 56
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #2 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

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #3 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

Offline Davidxx

  • Junior Mitglied
  • **
  • Beiträge: 56
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #4 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.

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #5 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.

Code
strUserVorlagen = Application.Options.DefaultFilePath(wdUserTemplatesPath)
Somit bekommt man das Verzeichnis, welches als Verzeichnis fuer dei Benutzervorlagen definiert ist.


Andreas

Offline Davidxx

  • Junior Mitglied
  • **
  • Beiträge: 56
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #6 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.


Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #7 am: 25.01.10 - 11:30:10 »
Kannst Du mal den betreffenden Code (anonymisiert natuerlich) hier posten?


Andreas

Offline Davidxx

  • Junior Mitglied
  • **
  • Beiträge: 56
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #8 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")   
   
   strUserVorlagen = Application.Options.DefaultFilePath(wdUserTemplatesPath)

   
   'Dim WshShell As Variant
   'Dim oShellLink As Variant
   'Set WshShell = CreateObject("Wscript.Shell")
   'Set oShellLink = WshShell.CreateShortcut("D:\Daten\Eigene Dateien\Eigene Bilder\Actionleiste BDB.JPG.lnk")
   'oShellLink.TargetPath = "D:\Actionleiste BDB.JPG" 
   'oShellLink.Save
   
   'Call WshShell.RegRead( "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Word\Recent Templates" )
   
   '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
      
      wordObj.Selection.Font.Bold = True   'Fett einschalten
      wordObj.Selection.TypeText varProjekttitel(0)+Chr$(11)
      wordObj.Selection.Font.Bold = False  'Fett ausschalten
      
      wordObj.Selection.TypeText varKurzbez(0)+Chr$(11)
      
      wordObj.Selection.TypeText "Kunde: "
      wordObj.Selection.TypeText varKunde(0)+Chr$(11)
      
      wordObj.Selection.TypeText varKurzbeschreibung(0)+Chr(10)
      
      '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

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #9 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

Offline Davidxx

  • Junior Mitglied
  • **
  • Beiträge: 56
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #10 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

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #11 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

wdUserTemplatesPath = 2
wdWorkgroupTemplatesPath = 3


Andreas

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #12 am: 25.01.10 - 13:26:58 »
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #13 am: 25.01.10 - 13:28:28 »
@Axel,

Irgendwann muss ich mir diesen Link endlich mal kopieren.   ;)


Andreas

Offline Davidxx

  • Junior Mitglied
  • **
  • Beiträge: 56
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #14 am: 25.01.10 - 13:30:54 »
Ah ok, wieder was gelernt.

Allerdings ist mit jetzt noch nicht ganz klar was ich mit der Konstanten machen soll und wie ich die ins Script bekomme, sodass sie funktioniert  :(

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #15 am: 25.01.10 - 13:34:26 »
Du definierst sie am einfachsten als Konstante am Beginn deines Scripts. Ich mache das in der Regel nach den DIM-Anweisungen.

Z.B. so:
...
Dim oRTItemBody As NotesRichTextItem
   
Const wdUserTemplatesPath = 2
Const wdWorkgroupTemplatesPath = 3

...
Set oDb = oSession.CurrentDatabase
...

Im Script selbst kannst du dann wdUserTemplatesPath und wdWorkgroupTemplatesPath verwenden.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #16 am: 25.01.10 - 13:34:51 »
... entweder die Konstanten deklarieren oder die Werte direkt verwenden...

Toni

EDIT: Axel war schneller
Grüßle Toni :)

Offline Davidxx

  • Junior Mitglied
  • **
  • Beiträge: 56
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #17 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ß

Offline ata

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Rich Text Feld als Word Object Quelldokument
« Antwort #18 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...

Toni
Grüßle Toni :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz