Das Notes Forum

Lotus Notes / Domino Sonstiges => OLE/COM-Programmierung => Thema gestartet von: Barbara am 04.02.10 - 15:02:47

Titel: Aus Notes in Word Tabellen modifizieren
Beitrag von: Barbara am 04.02.10 - 15:02:47
Hallo zusammen,
Entschuldigung für den Threadtitel, mir ist nichts aussagekräftigeres eingefallen.

Zu meinem Problem habe ich auch einen Thread im ms-office-forum gepostet, dort bekomme ich leider keine Antworten, denke ich bin dort auch nicht richtig. http://www.ms-office-forum.de/forum/showthread.php?t=261198

Situation:
Es können mehrere Referenzen (Notesdokumente) ausgewählt werden, die dann in formatierte Worddokumente exportiert werden. Die Dots sind Vorgaben aus dem Marketing, Corporate Desgin .....
Prinzipiell auch kein Problem.

Die Dots enthalten Tabellen. Faste jede Spalte hat eine andere Formatvorlage. In einer Zelle gibt es sogar 2 Formatvorlagen. Funktioniert auch noch.

Um das Ganze dynamisch zu halten (die Anzahl der ausgewählten Dokumente kann jede beliebige Menge annehmen), möchte ich nach jedem Export eine neue Zeile anhängen. Die Formatvorlagen sollen natürlich übernommen werden.

Das aufgezeichnete Makro lieferte mir die Zeile: "Selection.InsertRowsBelow 1" ; es wurde jedoch immer nur 1 bzw. in der Zelle mit den 2 Vorlagen nur die letzte Formatvorlage übernommen.

Aus der Visual Basic Hilfe:
Zitat
Beispiel
In diesem Beispiel wird die zweite Zeile in der ersten Tabelle ausgewählt und darunter eine neue Zeile eingefügt.

ActiveDocument.Tables(1).Rows(2).Select
Selection.InsertRowsBelow


mein code (Auszug):
Code
Liste = auslesen(db,session,doc)		
wwApp.ActiveDocument.Tables(1).cell(y+1,1).Range.text =Liste(0,0)+Chr(13)+Liste(0,1)
wwApp.ActiveDocument.Tables(1).cell(y+1,2).Range.text = Liste(1,0) +Chr(13) + Chr(10)
wwApp.ActiveDocument.Tables(1).cell(y+1,2).Range.insertafter Liste(1,1)
wwApp.ActiveDocument.Tables(1).cell(y+1,3).Range.text =Liste(2,0)
wwApp.ActiveDocument.Tables(1).cell(y+1,4).Range.text =Liste(4,0)
wwApp.ActiveDocument.Tables(1).cell(y+1,5).Range.text =Liste(5,0)
wwApp.ActiveDocument.Tables(1).cell(y+1,6).Range.text = Liste(6,0)
wwApp.ActiveDocument.Tables(1).rows(y+1).Select
Selection.InsertRowsBelow 1
=>  Fehlermeldung Variant does not contain an object (Selection)

nächster Versuch mit
Code
wwApp.ActiveDocument.Tables(1).cell(y+1, 2).Range.InsertRowsBelow 1
kommt die Fehlermeldung:Instancemember InsertRowsbelow does not exist

Wie hänge ich eine Zeile an, wie bringe ich die Formatvorlagen in die Zellen?

Gruß

Barbara



Titel: Re: Aus Notes in Word Tabellen modifizieren
Beitrag von: Axel am 04.02.10 - 15:41:27
Ich habe das bisher immer so gemacht, dass ich in der Tabelle in der letzten Zeile in der ganz rechten Spalte ein "MoveRight" ausgeführt habe. Dadurch wird eine neue Tabellenzeile angehängt und die Formatierung von der vorherigen übernommen.

Const wdCell = 12
...
wwApp.Selection.MoveRight(wdCell)

Axel
Titel: Re: Aus Notes in Word Tabellen modifizieren
Beitrag von: Barbara am 04.02.10 - 15:59:57
Hallo Axel,

Code
wwApp.ActiveDocument.Tables(1).cell(y+1,6).select
Selection.MoveRight(wdCell)

Funktioniert nicht, ich bekommen die Selection nicht hin, "Variant does not contain an object"

verzweifelter Versuch die Selection zu umgehen:

Code
wwApp.ActiveDocument.Tables(1).cell(y+1,6).select.MoveRight(wdCell)


=> "Select ist keine Eigenschaft"

Moveright auf die range losgelassen
Code
wwApp.ActiveDocument.Tables(1).cell(y+1,6).Range.MoveRight(wdCell)


=> "Instancemember Moveright does not exist"

Ich bin zu blöd für den MS-Kram  >:(

Titel: Re: Aus Notes in Word Tabellen modifizieren
Beitrag von: Glombi am 04.02.10 - 16:18:31
Damit Du Selection. ... verwenden kannst, musst Du es erst setzen:

Set selection = wwApp.Selection


Andreas
Titel: Re: Aus Notes in Word Tabellen modifizieren
Beitrag von: Barbara am 04.02.10 - 19:01:34
so, mit Hilfe von Axel und Andreas füge ich jetzt Zeilen ein. Die Formatvorlagen sind auch übernommen, bis auf die Zelle mit den 2 Formatvorlagen.
Meine Idee, ich kopiere das Format aus der vorhergehenden Zeile in die neu eingefügte:

Code
Set Selection = wwApp.Selection
wwApp.Selection.MoveRight(wdCell)		
wwApp.ActiveDocument.Tables(1).cell(y+1,2).range.select
Selection.copyformat
wwApp.ActiveDocument.Tables(1).cell(y+2,2).range.select
Selection.pasteformat

Aber: jetzt hat die Zelle auch in der ursprünglichen Zeile nur noch die erste Formatvorlage.

Also, wie spreche ich jetzt den 1. Absatz an, weise ihm Vorlage 1 zu, alle weiteren Absätzen bekommen dann Vorlage 2?

Irgendwie mit dem paragraphen

Code
wwApp.ActiveDocument.Tables(1).cell(y+1,2).paragraph(1).range.select
Selection.copyformat
wwApp.ActiveDocument.Tables(1).cell(y+2,2).paragraph(1).range.select
Selection.pasteformat

aus der VB Hilfe
Zitat
ActiveDocument.Paragraphs(1).Range.Select
Selection.CopyFormat
ActiveDocument.Paragraphs(2).Range.Select
Selection.PasteFormat

Das geht aber nicht in der Zelle: mein obiger code liefert mir "Instance member PARAGRAPH does not exist.

Habt Ihr noch ein bißchen input?
Titel: Re: Aus Notes in Word Tabellen modifizieren
Beitrag von: Axel am 04.02.10 - 19:42:22
Eine Idee wäre, den kompletten Inhalt der entsprechenden Zelle kopieren (auch wenn es sich nur um Zeilenschaltungen handelt) und dann in die Zelle der neuen Zeile einfügen. Dann sollten auch die Formatierungen mitgenommen werden.

Ist aber nur mal so 'ne Idee. Ob's funktioniert müsste man testen.

Axel
Titel: Re: Aus Notes in Word Tabellen modifizieren
Beitrag von: Glombi am 05.02.10 - 08:32:32
paragraph oder paragraphs ?
Titel: Re: Aus Notes in Word Tabellen modifizieren
Beitrag von: Barbara am 05.02.10 - 11:42:39
Guten Morgen,

@Andreas: natürlich paragraphs, irgendwann sollte man einfach die Kiste runterfahren und was ganz anderes machen  :)

@Axel: die Idee war super, jetzt klappts.

hier der code:
Code
....
While Not doc Is Nothing	
y=y+1
Liste = auslesen(db,session,doc)		
wwApp.ActiveDocument.Tables(1).cell(y+1,1).Range.text =Liste(0,0)+Chr(13)+Liste(0,1)
wwApp.ActiveDocument.Tables(1).cell(y+1,2).Range.text = Liste(1,0) +Chr(13) + Chr(10)
wwApp.ActiveDocument.Tables(1).cell(y+1,2).Range.insertafter(Liste(1,1))
wwApp.ActiveDocument.Tables(1).cell(y+1,3).Range.text =Liste(2,0)
wwApp.ActiveDocument.Tables(1).cell(y+1,4).Range.text =Liste(4,0)
wwApp.ActiveDocument.Tables(1).cell(y+1,5).Range.text =Liste(5,0)
wwApp.ActiveDocument.Tables(1).cell(y+1,6).Range.text = Liste(6,0)

'neue Zeile anhängen
Set Selection = wwApp.Selection
Selection.MoveRight(wdCell)
Selection.MoveRight(wdCell)
Selection.MoveRight(wdCell)
Selection.MoveRight(wdCell)
Selection.MoveRight(wdCell)
If y=1 Then Selection.MoveDown(wdLine) 'nur in der Titelzeile muss nach unten gesprungen werden
wwApp.Selection.MoveRight(wdCell)

'2.Zelle kopieren um Formate zu übernehmen
wwApp.ActiveDocument.Tables(1).cell(y+1,2).Range.copy
wwApp.ActiveDocument.Tables(1).cell(y+2,2).Range.paste

Set doc = view.GetNextDocument(doc)
wend
wwApp.ActiveDocument.Tables(1).rows(y+2).delete 'letzte Zeile löschen enthält nur kopierte 2. Zelle
	
Call wwbook.saveas(Pfad(0)+"RefList_01_"+dateidatum.dateonly+".doc")

Vielen, vielen Dank - ich frage mich warum ich überhaupt erst noch im ms-office-forum fremdgegangen bin. Hier ist man immer wieder gut aufgehoben. :love:

Ein schönes Wochenende

Barbara