Benutzer-Werkzeuge

Webseiten-Werkzeuge


word-und-excel

Dies ist eine alte Version des Dokuments!


WORD + EXCEL

Der Zugriff per Skript auf WORD und EXCEL ist recht einfach. Man muss nur jeweils einer Variablen das entsprechende Objekt zuweisen, z.B. mit

  • Set word = CreateObject("Word.Application") bzw.
  • Set excel = CreateObject("Excel.Application")


Bezogen auf das Objekt kann man dann VBA-Befehle anwenden, am besten mit

With Objekt
Anweisung
End With

VBS-Beispiel: Übertragung von Bilddaten zu einem WORD-Dokument
Voraussetzung ist, dass WORD installiert ist.
Option Explicit Dim Eintrag

if FF_GetImageCount > 0 then

  call Bilddaten
  call WordDokument

else

  msgbox "Es wurden keine Bilder ausgewählt!",vbExclamation,"Abbruch"

end if '——————————————————————————————— Sub WordDokument Dim word

set word = CreateObject("Word.Application") 'Word-Objekt

'Word-Aufruf with word

  .Documents.Add            'Standardvorlage öffnen
  .Selection.TypeText Eintrag    'Texteintrag in Word
  .visible = true        'Dokument sichtbar machen

end with

Set word = Nothing 'Wordobjekt frei geben

End Sub '——————————————————————————————— Sub Bilddaten Dim n,p

Eintrag = "Pfad " & FF_GetImagePath() & vbNewLine & vbNewLine

for n = 0 to FF_GetImageCount -1

  FF_LoadImage(FF_GetImageName(n))
  p = InStrRev(FF_GetImageName(n),"\")
  Eintrag = Eintrag & "Bild " & mid(FF_GetImageName(n),p+1)
  if FF_HasExif() then
      Eintrag = Eintrag & vbNewLine & "Kamera " & FF_GetExifTag("Model")
      Eintrag = Eintrag & vbNewLine & "Aufnahme vom " & FF_GetExifTag("DateTimeOriginal")
      Eintrag = Eintrag & vbNewLine & "Belichtung " & FF_GetExifTagAdvanced("ExposureTime") & " sec. "
      Eintrag = Eintrag & "mit Blende " & FF_GetExifTagAdvanced("FNumber")
      Eintrag = Eintrag & vbNewLine & "Brennweite " & FF_GetExifTagAdvanced("FocalLength") & " mm"
      Eintrag = Eintrag & vbNewLine & "ISO " & FF_GetExifTag("ISOSpeedRatings")
      if FF_GetExifTag("Flash") mod 2 = 0 then
          Eintrag = Eintrag & " ohne Blitz"
      else
          Eintrag = Eintrag & " mit Blitz"
      end if
  else
      Eintrag = Eintrag & vbNewLine & "Keine Kameradaten!"
  end if
  Eintrag = Eintrag & vbNewLine & vbNewLine

next

End Sub '——————————————————————————————— Nach Zusammenfassung der Bilddaten in der Variable Eintrag wird mit Documents.Add die Standardformatvorlage geöffnet und dort mit Selection.TypeText der Inhalt der Variablen eingetragen.
Will man jetzt beispielsweise Schriftart und Größe ändern und soll außerdem der Cursor am Dokumentenanfang stehen, ist das und anderes mit den entsprechenden VBA-Befehlen leicht realisierbar. Wenn man die VBA-Befehle nicht kennt, hilft der eingebaute Makrorekorder.

  • Anklicken von "Makro aufzeichnen"
  • Strg + A betätigen zur Markierung des gesamten Dokuments
  • Schriftart und Größe wählen, hier "Arial" und "10"
  • Strg + Pos1 betätigen um den Cursor auf den Dokumentenanfang zu stellen
  • Anklicken von "Aufzeichnung beenden"

Wählt man dann unter "Makros" das erstellte Makro mit "Bearbeiten" aus, wird die verwendeten VBA-Befehle mit ihren Variablen und Konstanten angezeigt:
Sub Makro1() ' Makro1 Makro

  Selection.WholeStory
  Selection.Font.Name = "Arial"
  Selection.Font.Size = 10
  Selection.HomeKey Unit:=wdStory

End Sub
Eine hier verwendete Konstante ist wdStory, die im Skript definiert werden muss. Um den Wert zu ermitteln, startet man das Makro im Einzelschritt mit F8. Wenn man jetzt den Cursor über wdStory verweilen lässt, wird der Wert 6 angezeigt. Man muss also definieren const wdStory = 6 und für Unit:=wdStory nur noch die Konstante einsetzen. Außerdem muss den VBA-Befehlen zur Anbindung an das Objekt jeweils ein Punkt vorangestellt werden.
Das sieht dann für die Routine WordDokument wie folgt aus:
Sub WordDokument Dim word

set word = CreateObject("Word.Application") 'Word-Objekt

'Word-Aufruf with word

  .Documents.Add            'Standardvorlage öffnen
  .Selection.TypeText Eintrag    'Texteintrag in Word
  '### Makroanfang
  const wdStory = 6
  .Selection.WholeStory
  .Selection.Font.Name = "Arial"
  .Selection.Font.Size = 10
  .Selection.HomeKey wdStory
  '### Makroende
  .visible = true        'Dokument sichtbar machen

end with

Set word = Nothing 'Wordobjekt frei geben

End Sub
VBS-Beispiel: Übertragung von Bilddaten zu einem EXCEL-Tabellenblatt
Voraussetzung ist, dass EXCEL installiert ist.
Option Explicit Dim Array

if FF_GetImageCount > 0 then

  call Bilddaten
  call ExcelTabelle

else

  msgbox "Es wurden keine Bilder ausgewählt!",vbExclamation,"Abbruch"

end if '——————————————————————————————— Sub ExcelTabelle Dim excel

Set excel = CreateObject("Excel.Application") 'Excel-Objekt

'Excel-Aufruf With excel

  .Workbooks.Add    'Tabellenblatt hinzufügen
  .ActiveSheet.Cells(3,1).Resize(ubound(Array,1)+1,ubound(Array,2)+1).Value = Array
  .ActiveSheet.Cells(1,1).Value = "Pad " & FF_GetImagePath()
  .visible = true    'Tabellenblatt sichtbar machen

end with

Set excel = Nothing 'Excelobjekt frei geben

End Sub '——————————————————————————————— Sub Bilddaten Dim n,p,HLarray,s

'Überschriften in Array eintragen const HeadLine = "Bild/Kamera/Aufnahme vom/Zeit/Blende/Brennweite/ISO/Blitz" HLarray = split(HeadLine,"/") Redim Array(FF_GetImageCount,ubound(HLarray)) for n = 0 to ubound(HLarray)

  Array(0,n) = HLarray(n)

next

'Bilddaten in Array eintragen for n = 0 to FF_GetImageCount -1

  FF_LoadImage(FF_GetImageName(n))
  p = InStrRev(FF_GetImageName(n),"\")
  s = 0
  Array(n+1,s) = mid(FF_GetImageName(n),p+1)    : s = s+1
  if FF_HasExif() then
      Array(n+1,s) = FF_GetExifTag("Model")    : s = s+1
      Array(n+1,s) = FF_GetExifTag("DateTimeOriginal")    : s = s+1
      Array(n+1,s) = FF_GetExifTagAdvanced("ExposureTime") & " sec."    : s = s+1
      Array(n+1,s) = FF_GetExifTagAdvanced("FNumber")    : s = s+1
      Array(n+1,s) = FF_GetExifTagAdvanced("FocalLength") & " mm"    : s = s+1
      Array(n+1,s) = FF_GetExifTag("ISOSpeedRatings")    : s = s+1
      if FF_GetExifTag("Flash") mod 2 = 0 then Array(n+1,s) = "Nein" else    Array(n+1,s) = "Ja"
  else
      Array(n+1,s) = "Keine Daten!"
  end if

next

End Sub '————————————————————————————————


Hier werden die Bilddaten mit Spaltenüberschriften sinnvollerweise in eine Datentabelle Array eingetragen
und dann in das mit Workbooks.Add geöffnete Tabellenblatt mit ActiveSheet.Cells(Zeile,Spalte).Resize ab der 3. Zeile und der 1. Spalte die gesamte Tabelle in einem Rutsch eingetragen. Das geht erheblich schneller, als die Daten Zelle für Zelle zu übertragen.
Anschließend wird noch mit ActiveSheet.Cells(Zeile,Spalte).Value der Pfad des aktuellen Verzeichnis in die 1. Zeile eingetragen.
Will man beispielsweise noch die Spaltenbreite optimieren, ist die Ermittlung der notwendigen VBA-Befehle wie bereits beschrieben mit dem Makrorekorder möglich.
Das aufgenommene Makro sieht so aus:
Sub Makro1() ' Makro1 Makro

  Cells.Select
  Selection.Columns.AutoFit

End Sub
Die Routine Exceltabelle wird wie folgt ergänzt:
Sub ExcelTabelle Dim excel

Set excel = CreateObject("Excel.Application") 'Excel-Objekt

'Excel-Aufruf With excel

  .Workbooks.Add    'Tabellenblatt hinzufügen
  .ActiveSheet.Cells(3,1).Resize(ubound(Array,1)+1,ubound(Array,2)+1).Value = Array
  '#### Makroanfang
  .Cells.Select
  .Selection.Columns.AutoFit
  '#### Makroende
  .ActiveSheet.Cells(1,1).Value = "Pad " & FF_GetImagePath()
  .visible = true    'Tabellenblatt sichtbar machen

end with

Set excel = Nothing 'Excelobjekt frei geben

End Sub
Zu VBA-Befehlen, die nicht mit dem Makrorekorder zu ermitteln sind, findet man bei diversen Foren im Internet Hilfe.

word-und-excel.1302113762.txt.gz · Zuletzt geändert: (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki