Autor Thema: Scriptprobleme  (Gelesen 3499 mal)

Offline RvM

  • Senior Mitglied
  • ****
  • Beiträge: 375
  • Geschlecht: Männlich
  • Domino: Geht nicht - gibt's nicht
    • PhotosForFree
Scriptprobleme
« am: 28.11.07 - 11:31:41 »
Ich habe hier ein Script, das mir eine MS-Word Tabellenliste aus ausgewählten Dokumenten einer Ansicht macht. Nun möchte ich aber zusätzlich aus dem ersten Dokument der Liste quasi als Überschrift der Tabelle die Inhalte von zwei Feldern vor die eigentliche Tabelle bekommen.
Da ich mit so komplexen Scripten mien Probleme habe, freue ich mich über jede Hilfe  ;)

Hier der erste Teil des Scriptes:
Code
Sub Initialize
	
	
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim collection As NotesDocumentcollection
	Dim i As Integer
	Dim Vorlagenpfad As String     
	Dim AnsichtZeile() As Variant
	Dim Zeile As String
	Dim Spalte As String
	Dim Einsender As String
	Dim PersNr As String
	Dim Betrag As Variant
	
	
	Set db = session.CurrentDatabase
	
	Set collection  = db.UnprocessedDocuments
	If collection.count > 0 Then
		
          'Pfad zu Word-Dokumentvorlagen bestimmen   
          'Erstellung eines Word97-Objektes zur Bestimmung des Vorlagenpfads
		Dim WordApp As Variant
		Set WordApp = CreateObject("Word.Application.8")
		Vorlagenpfad = WordApp.Options.DefaultFilePath(2)
          'Beenden von Word ohne weitere Abfragen
		Dim SaveOptions As Variant
		SaveOptions = 0
		WordApp.Application.Quit SaveOptions  
          'Objektvariablen löschen
		Set WordApp = Nothing
		
          ' Word Dokumentenvorlage über API32 Dialog ermitteln
		Dim DocVorlage As String     
		DocVorlage = FileOpenDialog(Vorlagenpfad, "", "Microsoft Word Dokumentvorlage|*.dot", "dot", "Dokumentvorlage auswählen:")
		If DocVorlage = "{%Err%}" Then        
			Exit Sub
		End If
		
		
          'Word-Objekt auf Basis der Dokumentvorlage erstellen
		
          'Erstellung eines Word-Objektes
		Set WordApp = CreateObject("Word.application")
		
          'Word nicht sichtbar im Hintergrund
         ' WordApp.Visible = False
		WordApp.Visible = True
		
          'Neue Worddatei öffnen
		WordApp.Documents.Add(DocVorlage)
Hier sollte nach meiner Erkenntnis nun der Aufruf zum Auslesen der beiden Feldinhalte kommen, denn danach geht es weiter mit der Tabelle:
Code
For i = 1 To collection.Count
			Set doc = collection.GetNthDocument( i )
			
			Set WordRange = Tabelle.Rows(i).Cells(1).Range
			WordRange.InsertAfter Cstr(doc.Name(0))+", "+doc.Vorname(0)+Chr$(13)
			
			
	            'Neue Zeile in Word-Tabelle einfügen
			Set NeueZeile = Tabelle.Rows.Add()                  
		Next
		
		
          'Set meineZeile = Selection.Rows(1)
          'meineZeile.Cells.Merge
		
		
		
           'Speichern des Word Dokuments
		WordApp.ActiveDocument.Save
		
		
	Else
		Messagebox "Es sind keine Einträge selektiert!"
	End If
	
	Exit Sub
	
DateiNichtVorhanden:
	Msgbox "Die Dokumentvorlage wurde nicht in ihrem Dokumentvorlagenverzeichnis gefunden! Die Aktion wird abgebrochen!"
	Exit Sub
End Sub
-------
Gruß Rolf
--------------

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Scriptprobleme
« Antwort #1 am: 28.11.07 - 11:42:24 »
Hallo,

Um bestimmte Werte des 1. Docs der Collection zu ermitteln würde ich das in etwa so machen:

For i = 1 To collection.Count
         Set doc = collection.GetNthDocument( i )
         
         Set WordRange = Tabelle.Rows(i).Cells(1).Range
         WordRange.InsertAfter Cstr(doc.Name(0))+", "+doc.Vorname(0)+Chr$(13)
         
         
               'Neue Zeile in Word-Tabelle einfügen
         Set NeueZeile = Tabelle.Rows.Add()                 
      Next


Code
set doc = collection.getFirstDocument

i = 1
if not doc is Nothing Then
  ' ...hier die Felder des 1. docs auslesen
    WordRange.InsertAfter Cstr(doc.GetItemValue( "Name" )(0)) & ", " & doc.getItemValue( "Vorname" )(0) & Chr$(13)
    Set NeueZeile = Tabelle.Rows.Add()     
end if

'nun den rest auslesen
while not doc is Nothing
    '.. hier der code
    i = i + 1
    Set WordRange = Tabelle.Rows(i).Cells(1).Range
    WordRange.InsertAfter Cstr(doc.Name(0))+", "+doc.Vorname(0)+Chr$(13)
    Set NeueZeile = Tabelle.Rows.Add()     
    set doc = collection.getNextDocument( doc )
 
wend

« Letzte Änderung: 28.11.07 - 11:51:44 von dirk_2909 »
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline RvM

  • Senior Mitglied
  • ****
  • Beiträge: 375
  • Geschlecht: Männlich
  • Domino: Geht nicht - gibt's nicht
    • PhotosForFree
Re: Scriptprobleme
« Antwort #2 am: 28.11.07 - 11:57:17 »
Hallo Dirk,
das klappt schon ganz gut . nur wollte ich den Feldinhalt von "web_thema" nicht in die Tabelle mit packen, sondern als separaten Text über die Tabelle ablegen. Der Codeteil sieht nun wie folgt aus:
Code
  ' ...hier die Felder des 1. docs auslesen
			Set WordRange = Tabelle.Rows(i).Cells(1).Range
			WordRange.InsertAfter Cstr(doc.web_thema(0))
			Set NeueZeile = Tabelle.Rows.Add()     
		End If
Wie müsste ich dann WordRange definieren?
Und weisst Du evtl. auch, wie man mit diesem Script Word beibringt, das er als Standardschrift "Arial" verwenden soll?
-------
Gruß Rolf
--------------

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Scriptprobleme
« Antwort #3 am: 28.11.07 - 12:07:34 »
Soll der Text aus dem 1. Doc, die Spaltenüberschrift bilden?
Wenn ja müsste er doch mit in die Tabelle, nur anders (Bold) dargestellt werden?

Wie man die Schriftart übergibt, kann ich adhoc nicht sagen. Muss ich mal nachschauen ;-)
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Scriptprobleme
« Antwort #4 am: 28.11.07 - 12:11:03 »
Die Schriftrat kann man in etwa so setzen:

Zitat
With Selection.Font
        .Name = "Arial"
        .Size = 12
        .Bold = False
        .Italic = False
 End With

..muss natürlich entsprechend angepasst werden.

Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline RvM

  • Senior Mitglied
  • ****
  • Beiträge: 375
  • Geschlecht: Männlich
  • Domino: Geht nicht - gibt's nicht
    • PhotosForFree
Re: Scriptprobleme
« Antwort #5 am: 28.11.07 - 12:12:05 »
Soll der Text aus dem 1. Doc, die Spaltenüberschrift bilden?
Wenn ja müsste er doch mit in die Tabelle, nur anders (Bold) dargestellt werden?

Nein, der Inhalt sollte als Überschrift der kompletten Seite gelten.
Zum besseren Verständnis:
Es wird aus einer Ansicht eine Teilnehmerliste ausgedruckt und oben als Header soll dann das Seminarsthema sowie das enstprechende Datum drüber stehen. Diese daten stehen in jedem Dokument mit drin, muss aber halt nur 1mal erwähnt werden.
-------
Gruß Rolf
--------------

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Scriptprobleme
« Antwort #6 am: 28.11.07 - 12:25:04 »
Wie wäre es denn mit einer Formatvorlage in Word für das Seminarformular.

Diese Vorlage dann via Script holen , öffnen und Inhalte einfügen:

Code
Set msApp = CreateObject(strAppClass)
Set msMainDoc = msApp.Documents.Open(strVorlageDatei)
Set msFields = msApp.Documents(strVorlageDatei).FormFields
msFields.Item("fldSeminarname").Result=.Seminarthema(0)

Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Scriptprobleme
« Antwort #7 am: 28.11.07 - 12:26:29 »
Das müsste so gehen:


Set objWord = CreateObject("Word.Application")
....
objWord.Selection.Tables(1).Rows.HeadingFormat = True
...

Damit werden die Tabellenzelle als "Kopfzeile" definiert in der sich der Cursor befindet

Alternativ:

objWord.Selection.Rows.HeadingFormat = True

Damit werden die markierten Tabellenzellen als "Kopfzeile" definiert


Axel

    
« Letzte Änderung: 28.11.07 - 12:28:00 von Axel »
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Scriptprobleme
« Antwort #8 am: 28.11.07 - 12:29:36 »
Zitat
Damit werden die Tabellenzelle als "Kopfzeile" definiert in der sich der Cursor befindet

Hallo Axel.
Er will keine Kopfzeile in der Tabelle.
Sondern einen bestimmten Text an definierter Stelle in dem Word-Dokument.

Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Scriptprobleme
« Antwort #9 am: 28.11.07 - 12:37:51 »
Uups. Stimmt, das hatte ich auf die Schnelle überlesen.

Wie wäre es denn mit einer Formatvorlage in Word für das Seminarformular.

Diese Lösung würde ich auch empfehlen.


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

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Scriptprobleme
« Antwort #10 am: 28.11.07 - 12:40:22 »
Hier >> http://atnotes.de/index.php?topic=4810.msg208126#msg208126  ist eine schöne Anwendung in der mit Vorlagen gearbeitet wird.

Denke es hilft .
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline RvM

  • Senior Mitglied
  • ****
  • Beiträge: 375
  • Geschlecht: Männlich
  • Domino: Geht nicht - gibt's nicht
    • PhotosForFree
Re: Scriptprobleme
« Antwort #11 am: 28.11.07 - 14:41:50 »
Erst einmal vielen Dank für die vielen Tipps. Aber bevor ich eine neue Applikation installiere, akzeptiere ich auch die kleine Lösung mit  der Kopfzeiel von Axel  ;)

Set objWord = CreateObject("Word.Application")
....
objWord.Selection.Tables(1).Rows.HeadingFormat = True
...

Damit werden die Tabellenzelle als "Kopfzeile" definiert in der sich der Cursor befindet

Alternativ:

objWord.Selection.Rows.HeadingFormat = True

Damit werden die markierten Tabellenzellen als "Kopfzeile" definiert

Axel


Beide Angebote entsprechend Umgesetzt führen lieder zu Nichts  ???
-------
Gruß Rolf
--------------

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz