Autor Thema: TIPP: Klasse für Word - Automation  (Gelesen 13422 mal)

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
TIPP: Klasse für Word - Automation
« 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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline MatzeW

  • Frischling
  • *
  • Beiträge: 45
Re: TIPP: Klasse für Word - Automation
« Antwort #1 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



Driri

  • Gast
Re: TIPP: Klasse für Word - Automation
« Antwort #2 am: 18.08.11 - 16:05:14 »
Ist die erste Fehlermeldung genau so ? Weil dann hast Du einen Schreibfehler drin (fehlendes t).

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: TIPP: Klasse für Word - Automation
« Antwort #3 am: 18.08.11 - 16:10:04 »
Hast du vielleicht den gesamten Code.

Wie wurde die Variable WordObject deklariert und initialisiert?

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

Offline MatzeW

  • Frischling
  • *
  • Beiträge: 45
Re: TIPP: Klasse für Word - Automation
« Antwort #4 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")  



« Letzte Änderung: 18.08.11 - 16:21:23 von MatzeW »

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: TIPP: Klasse für Word - Automation
« Antwort #5 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
Ohne Computer wären wir noch lange nicht hinterm Mond!

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: TIPP: Klasse für Word - Automation
« Antwort #6 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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline MatzeW

  • Frischling
  • *
  • Beiträge: 45
Re: TIPP: Klasse für Word - Automation
« Antwort #7 am: 18.08.11 - 16:24:55 »
Danke für die Schnelle Hilfe

Es Funktioniert einwandfrei



Offline MatzeW

  • Frischling
  • *
  • Beiträge: 45
Re: TIPP: Klasse für Word - Automation
« Antwort #8 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

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: TIPP: Klasse für Word - Automation
« Antwort #9 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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: TIPP: Klasse für Word - Automation
« Antwort #10 am: 19.08.11 - 10:51:44 »
Indem Du sie voher auf die Platte schreibst.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline MatzeW

  • Frischling
  • *
  • Beiträge: 45
Re: TIPP: Klasse für Word - Automation
« Antwort #11 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

Offline MatzeW

  • Frischling
  • *
  • Beiträge: 45
Re: TIPP: Klasse für Word - Automation
« Antwort #12 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
« Letzte Änderung: 19.08.11 - 14:17:19 von MatzeW »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz