Das Notes Forum

Lotus Notes / Domino Sonstiges => Tipps und Tricks => Thema gestartet von: Axel am 17.03.11 - 15:09:14

Titel: TIPP: Klasse für Word - Automation
Beitrag von: Axel am 17.03.11 - 15:09:14
"Notes und Drucken, zwei Welten treffen aufeinander." So kann man das Thema Drucken bei Notes umschreiben, obwohl in der Version 5 die Druckfunktion etwas erweitert wurde. Was liegt näher daran, ein parallel installiertes Office für die Ausgabe zu nutzen. Aus diesem Grund entstand diese Klasse für die Word-Automation. Sie stellt Grundfunktionen bereit um Dokumente auf Basis von Druckformatvorlagen zu erstellen, Daten zu übergeben, Text zu formatieren und Serienbriefe zu erstellen.

Mit Kenntnis der VBA-Syntax lassen sich die Klassen auch um weitere Funktionen, z.B. Tabellenfunktionen erweitern. Die angehängte Demo-Datenbank enthält die notwendigen Bibliotheken und 3 Beispielagenten.

Die Verwendung der Klassen ist denkbar einfach. Es muß lediglich ein Verweis auf die entsprechende Script-Bibliothek libWord eingefügt werden.

Die Codierung wird hier beispielhaft am Korrespondenz-Agenten (ausschnittsweise) gezeigt:
 
...
Dim cWord As cWord  'Variable deklarieren
Dim strVorlage As String

"strVorlage = c:\temp\vorlage.dot"

'Neue Instanz der Klasse cWord
Set cWord = New cWord
   
'Neues Dokument auf Basis der Vorlage erstellen. Dot muß nicht im Vorlagenverzeichnis liegen
Call cWord.CreateNewDoc(strVorlage)

'Einfügen der Daten in entsprechende Formularfelder
strTemp = doc.Anrede(0)
If strTemp = "Herr" Then strTemp = strTemp & "n"
Call cWord.InsertInField("Anrede", strTemp)
Call cWord.InsertInField("Name", doc.Name(0))
Call cWord.InsertInField("Anschrift", doc.Anschrift(0))
Call cWord.InsertInField("Ort", doc.Ort(0))

'Einfügen von Text an einer Textmarke
Call cWord.InsertAtTM("Betreff", "Das ist die Betreffszeile")

'Setzen der Schriftattribute und Einfügen von Text
Call cWord.SetFontAttributes("Courier New", 14, True, False, False)  'Setzen der Schriftattribute
Call cWord.Insert("Das ist Text in Courier New 14pt fett")
Call cWord.NewLine(1)  'Einfügen einer Zeilenschaltung
Call cWord.SetFontAttributes("Times New Roman", 10, False, True, True)  '  'Setzen der Schriftattribute
Call cWord.Insert("Das ist Text in Times New Roman 10pt kursiv und unterstrichen")

'Word in den Vordergrund
Call cWord.ActivateWord
   
'Ausführen eines Makros in Worddokument mit Parameterübergabe
Call cWord.RunMacroEx ("ShowMessage", "Der Text wurde als Parameter übergeben!")
   
Delete cWord  'Instanz löschen

...


Axel
Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: MatzeW am 18.08.11 - 15:59:18
Hallo Miteinander,

Habe ein Kleines Script erstellt das ein paar Textzeilen vom Notes ins Word über gibt.
Nun möchte ich das es im Word etwas schöner aussieht. Nur bekomme ich das mit
der Formatierung nicht hin.

Bei versuch mit

Call wordObject.Selection.SetFontAttributes("Arial", 14, False, True, True)

erhalte ich die Meldung "Instance member SetFontatributes does not exist."


Call wordObject.Selection.Font.Name("Arial")

erhalte ich die Meldung "Microsoft Word: 'Name' ist keine Methode"


Weis jemand wie man Formatierung in Word in Notes ansprechen kann. Für Jede Hilfe
bin ich sehr Dankbar


Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: Driri am 18.08.11 - 16:05:14
Ist die erste Fehlermeldung genau so ? Weil dann hast Du einen Schreibfehler drin (fehlendes t).
Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: Axel am 18.08.11 - 16:10:04
Hast du vielleicht den gesamten Code.

Wie wurde die Variable WordObject deklariert und initialisiert?

Axel
Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: MatzeW am 18.08.11 - 16:15:01
Sorry die habe mich bei der Fehlermeldung in der Eile verschrieben.

Die erste Meldung lautet:

"Instance member SETFONTATTRIBUTES does not exist"



Hier die deklaration

Dim wordObject As Variant, actDoc As Variant
   Dim oSec As Variant
   Dim s As New NotesSession
   Dim TempArray As Variant
   Dim ThisField As String
   Dim doc As NotesDocument
   Dim db As notesdatabase   
   Dim dc As NotesDocumentCollection
   Dim TempOutput As String   
   Dim TempOutput1 As String   
   
   Set db = s.CurrentDatabase
   Set dc=db.UnProcessedDocuments
   
   Set wordObject = CreateObject ("Word.Application")
   
   wordObject.Documents.Add
   wordObject.Visible = True
   
   Set actDoc = wordObject.ActiveDocument
   Set oSec =actDoc.Sections(1)
   
   Call wordObject.MailingLabel.CreateNewDocument ( "C1453")
  
.
.
.
.

         Call wordObject.SetFontAttributes("Courier New", 14, True, False, False)
                        Call wordObject.Selection.Font.Name("Arial")  



Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: Axel am 18.08.11 - 16:17:14
SetFontAttributes ist eine Methode meiner Klasse (siehe angehängte Datenbank im ersten Post).


Dieser Code liegt dahinter:

Code
	Sub SetFontAttributes(strFont As String, intSize As Integer, intBold As Integer, intItalic As Integer, intUnderline As Integer)         
		With objWord.Selection.Font
			.Name = Cstr(strFont)  'Schriftart
			.Size = intSize  'Schriftgröße
			.Bold = intBold  'Fett
			.Italic = intItalic  'Kursiv
			.Underline = intUnderline  'Unterstreichen
		End With		
	End Sub

Axel
Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: Axel am 18.08.11 - 16:20:46
Bei dir müsste das dann in etwa so aussehen:

...
Call wordObject.MailingLabel.CreateNewDocument ( "C1453")
...
With wordObject.Selection.Font
   .Name = "Courier New"  'Schriftart
   .Size = 14  'Schriftgröße
   .Bold = True  'Fett
   .Italic = False  'Kursiv
   .Underline = False  'Unterstreichen
End With     
...

Axel
Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: MatzeW am 18.08.11 - 16:24:55
Danke für die Schnelle Hilfe

Es Funktioniert einwandfrei


Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: MatzeW am 19.08.11 - 10:37:56
Hallo Ich bins nochmal!

Wie kann ich den Worddocument eine Bild Ressource von der NotesDatenbank mitgeben?


Call wordObject.Selection.InlineShapes.AddPicture( "C:\Logo.gif")

verlangt das ich einen Pfad mitgebe.


Gruß

Matthias
Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: Axel am 19.08.11 - 10:50:07
Da fällt mir leider im Moment nicht viel dazu ein. Alle mir bekannten Methoden von Word um Bilder/Grafiken einzufügen benötigen eine Pfadangabe zu der entsprechenden Datei.

Die einzigste Idee die ich habe, wäre der Weg über die Zwischenablage oder dass man die Bild-Ressource aus der Notes-Datenbank temporär auf die Platte speichert. Ob das mit Bild-Resourcen aber überhaupt möglich ist kann ich nicht sagen.

Axel
Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: m3 am 19.08.11 - 10:51:44
Indem Du sie voher auf die Platte schreibst.
Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: MatzeW am 19.08.11 - 11:11:28
Danke für die schnellen Antworten.

Werde das Bild einfach zentral ablegen, wo jeder Zugriff drauf hat.

und

großes Kompliment an dieses Forum hat mir schon sehr oft geholfen.

Gruß

Matthias
Titel: Re: TIPP: Klasse für Word - Automation
Beitrag von: MatzeW am 19.08.11 - 14:06:03
Sorry das nochmals Störe

Aber Irgendwie will Word nicht das ich es Zentiert ausgebe. Es ist immer Linksbündig.


wordObject.Selection.ParagraphFormat.Alignment =  wdAlignParagraphCenter

Hat sich erledigt

habe die Word konstanten vergessen

 ' Konstanten für Word zur Absatzformatierung
   Const wdAlignParagraphLeft = 0
   Const wdAlignParagraphCenter = 1
   Const wdAlignParagraphRight = 2



Gruß

Matthias