Hallo Oscar, Bert und Markus
das Programm von Oscar ist völlig ok und löst die Aufgabe ordentlich.
Mich hatte aber weniger die Lösung interessiert, sondern vor Allem die Ein- / Ausgabe von Daten in Excel. Mir ging es um den Lerneffekt und eine Musterlösung für spätere eigene Anwendungen. Vielleicht ist eine derartige Musterlösung auch für Andere interessant.
In Oscars Lösung werden die Daten aus dem 1. Tabellenblatt der Excel-Datei in ein Array ausgelesen und anschliessend in eine csv-Datei geschrieben, die mit Excel problemlos geladen werden kann.
Man kann die Daten aber auch direkt in Excel schreiben. Dazu wird ein neues Tabellenblatt erzeugt und hinter das Datenblatt verschoben. Dann werden die Daten direkt in dieses neue Tabellenblatt geschrieben. Nach 4 s wird Excel wieder geschlossen.
Spoiler anzeigen
; Muster für die Steuerung von Excel durch AutoIt
; aus http://www.autoit.de/index.php?page=Thread&threadID=17607
Opt("MustDeclareVars", 1)
#include <Array.au3>
#include <Excel.au3>
Opt('WinTitleMatchMode', 2)
Global $oExcel, $s1ExcSheet, $s2ExcSheet
Global $hFile, $row, $ii, $kk, $nn, $sData
Global $nRow = 7, $nCol = 5, $a1Data, $a2Data[$nCol]
; Excel-Tabellenblatt öffnen und Daten Auslesen
$oExcel = _ExcelBookOpen(@ScriptDir & "\Adressen.xls" )
$s1ExcSheet = _ExcelSheetNameGet( $oExcel )
$a1Data = _ExcelReadSheetToArray( $oExcel )
; _ArrayDisplay($a1Data)
; Daten in eine csv-Datei Ausgeben
$hFile = FileOpen(@ScriptDir & '\Adressen.csv', 2)
If $hFile = -1 Then Exit 1
For $row = 1 To $a1Data[0][0] - $nRow Step $nRow
$sData = ""
For $ii = 0 To $nCol - 1
$sData &= StringStripWS($a1Data[$row + $ii][1], 3 ) & ";"
Next
; Das ";" hinter dem letzten Feld wird abgeschnitten
FileWriteLine($hFile, StringTrimRight($sData, 1))
Next
FileClose($hFile)
; zum 2. Tabellenblatt wechseln
; _ExcelSheetActivate($oExcel, 2)
; oder eine neue Tabelle hinzufügen und hinter die Tabelle mit den Daten verschieben
_ExcelSheetAddNew($oExcel, "" )
$s2ExcSheet = _ExcelSheetNameGet( $oExcel )
_ExcelSheetMove( $oExcel, $s2ExcSheet, $s1ExcSheet, False )
IF @error <> 0 Then Exit 2
$nn = Floor( $a1Data[0][0] / 7 )
[/autoit] [autoit][/autoit] [autoit]$kk = 0
For $row = 1 To $a1Data[0][0] - $nRow Step $nRow
For $ii = 0 To $nCol - 1
$a2Data[$ii] = StringStripWS($a1Data[$row + $ii][1], 3 )
IF $ii = $nCol - 1 Then
$kk += 1
; _ArrayDisplay($a2Data)
_ExcelWriteArray($oExcel, $kk, 1, $a2Data, 0 ) ; Zeilen in Excel schreiben
Endif
Next
Next
Sleep(4000)
_ExcelBookClose($oExcel)
WinClose('Microsoft Excel')