hipfzwirgel
Goto Top

AutoIt - Array auslesen und den Inhalt der Dateien in Worddatei einfügen

Hallo an alle AutoIt-Spezialisten,

ich erstelle gerade ein Script(genauer eine Funktion face-smile ), dass Bilder in eine Worddatei einfügen soll. Die Bilder werden als Screenshots erstellt und liegen somit in einem Verzeichnis auf der Platte. die Anzahl der Bilder kann variieren. Dieses Verzeichnis lese ich per _FileListToArray aus. Jetzt soll das Skript per For-Schleife nacheinander den Inhalt der Datei in die Word-Datei laden. Etwa in der Art:

For $i =0 to Ubound($Array, 1) -1

Nehme Inhalt von $Array[$i] und lade in Word

$i+=1

Next

Func Pictinsert()
	
	Local $FileList = _FileListToArray("C:\Users\uah7fe\Pictures\Screenpresso", "*", 1) ; hier wird die Dateiliste erstellt  
If @error = 1 Then
    MsgBox(0, "", "Keine Ordner gefunden.")  
    Exit
EndIf
If @error = 4 Then
    MsgBox(0, "", "Keine Dateien gefunden.")  
    Exit
EndIf

For $i = 0 to Ubound($FileList, 1) -1 ; hier soll der Inhalt der Datei nun in Word eingefügt werden



$i+=1 ; Zählvariable um eins erhöhen
Next


EndFunc

Könnte mir jemand erklären, bzw. helfen wie ich die Forschleife richtig erstelle und wie ich die Inhalte(Bilder) in Word laden kann. Evtl auch per Clipboard. Vielen lieben Dank im Vorraus...

Content-ID: 351857

Url: https://administrator.de/contentid/351857

Ausgedruckt am: 25.11.2024 um 09:11 Uhr

BassFishFox
BassFishFox 16.10.2017 um 21:28:21 Uhr
Goto Top
Hallo,

Zwar kein Spezialist aber. Ich denke Dir wird mit Deiner Frage hier :
https://autoit.de/index.php?board/4-hilfe-unterst%C3%BCtzung/
besser geholfen.

Denke fast, dass Dein Problem auch per powershell erledigt werden koennte. Das ist aber nicht mein Ding. face-wink

So nebenbei. Warum Word? Und welche Version von Word? Einmalig oder oefter? Was soll mit den Bildern passieren?

BFF
colinardo
Lösung colinardo 17.10.2017 aktualisiert um 16:47:52 Uhr
Goto Top
Servus @hipfzwirgel,
dein Versuch mit deiner Schleife würde fehl schlagen da das erste Array Element in der Ergebnisliste von _FileListToArray die Anzahl an gefundenen Dateien enthält. Also musst du $i = 1 als Anfangswert definieren damit du nur über die Dateien itterierst. Außerdem ist dein
$i+=1 ; Zählvariable um eins erhöhen
falsch da in einer For-Schleife die Zählervariable $i sowieso nach jedem Durchlauf erhöht wird, das ist ja der Sinn einer For-Schleife face-wink.

Um nun die Bilder eines Verzeichnisses in ein neues Word-Dokument einzufügen, erstellst du vor der Schleife erst einmal das Word-COM-Objekt, legst ein neues Dokument an, und in der Schleife fügst du dann nach VBA-Manier die Bilder in das neue Dokument ein:
#include <File.au3>
; Dateien in Array laden
$files = _FileListToArray("A:\images","*",1,True)  
if @error then
	msgbox(64,"Keine Dateien","Es wurden keine Dateien gefunden!")  
	Exit
EndIf
; Gültige Dateierweiterungen definieren
$validExtensionsPattern = "^(jpg|png|bmp|gif|tiff?)$"  

; Word COM-Object erstellen
$objWord = ObjCreate("Word.Application")  
; neues Dokument erstellen
$doc = $objWord.Documents.Add()

; Alle Dateien im Array durchlaufen
for $i = 1 to UBound($files) - 1
	; Dateipfad
	$file = $files[$i]
	; Pfadbestandteile zerlegen
	Local $sDrive,$sDir,$sFileName,$sExtension
	_PathSplit($file,$sDrive,$sDir,$sFileName,$sExtension)
	; nur wenn Datei eine gültige Erweiterung aus dem Pattern besitzt das Bild einfügen
	if StringRegExp($sExtension,$validExtensionsPattern) then
		$objWord.Selection.InlineShapes.AddPicture($file)
		$objWord.Selection.InsertParagraphAfter()
		$objWord.Selection.MoveDown()
	Else
		; Wenn ungültige Dateierweiterung benutzt wird, Fehler mitteilen
		msgbox(48,"Dateierweiterung ungültig","Die Dateierweiterung der Datei '" & $file & "' ist nicht gültig!",2)  
	Endif
Next
; Ergebnis anzeigen
$objWord.Visible = True
Fertig.

Trotzdem würde ich hier auf Dateierweiterungen einschränken (s. Code), denn wenn du mal eine Datei im Ordner hast die kein Bild ist klar das das nicht funktionieren kann.

Zitat von @BassFishFox:
Zwar kein Spezialist aber. Ich denke Dir wird mit Deiner Frage hier :
https://autoit.de/index.php?board/4-hilfe-unterst%C3%BCtzung/
besser geholfen.
Wieso so weit schweifen face-smile??
Denke fast, dass Dein Problem auch per powershell erledigt werden koennte.
Sicher, das ist aber hier nicht die Frage.
Das ist aber nicht mein Ding. face-wink
Wieso dann antworten wenn einem das Thema nicht geläufig ist?!
So nebenbei. Warum Word? Und welche Version von Word?
Ist nicht relevant da die Methoden zum Einfügen der Bilder bei allen Versionen gleich geblieben sind.
Einmalig oder oefter? Was soll mit den Bildern passieren?
Alle Bilder des Verzeichnisses, so dem Wortlaut des TOs

Grüße Uwe
hipfzwirgel
hipfzwirgel 23.10.2017 um 17:29:32 Uhr
Goto Top
Hallo Colinardo,

vielen lieben Dank für dein Code-Beispiel. Sehr interessant. Eine Frage noch? Kennst du eine Möglichkeit, einen Zeilenumbruch der per Schleife mittels folgendem Code
$oLine = _Word_DocAttach($oDoc, "")		  
$oLine = $oRange.InsertBreak(6)
gesetzt wird, später im Verlauf wieder zu entfernen?

Also Quasi statt InsertBreak DeleteBreak oder so. Hintergrund: Ich füge mit meiner Schleife die Bilder ein und setze zwischen die Bilder einen, bzw. 2 Zeilenumbrüche. Nach jedem 2. Bild setze ich einen Seitenumbruch. Damit die Formatierung der Seite gewahrt bleibt muss ich die zwei Linefeeds vor dem Seitenumbruch wieder entfernen.
colinardo
colinardo 23.10.2017 um 19:28:29 Uhr
Goto Top
Speichere den Range einfach in einer Variablen und lösche den Range hinterher.