1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. vigesimo

Beiträge von vigesimo

  • Txt / Excel Spalten in Zeilen konvertieren

    • vigesimo
    • 15. Februar 2010 um 20:24

    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
    [autoit]


    ; Muster für die Steuerung von Excel durch AutoIt
    ; aus http://www.autoit.de/index.php?page=Thread&threadID=17607

    [/autoit] [autoit][/autoit] [autoit]

    Opt("MustDeclareVars", 1)
    #include <Array.au3>
    #include <Excel.au3>
    Opt('WinTitleMatchMode', 2)

    [/autoit] [autoit][/autoit] [autoit]

    Global $oExcel, $s1ExcSheet, $s2ExcSheet
    Global $hFile, $row, $ii, $kk, $nn, $sData
    Global $nRow = 7, $nCol = 5, $a1Data, $a2Data[$nCol]

    [/autoit] [autoit][/autoit] [autoit]

    ; Excel-Tabellenblatt öffnen und Daten Auslesen
    $oExcel = _ExcelBookOpen(@ScriptDir & "\Adressen.xls" )
    $s1ExcSheet = _ExcelSheetNameGet( $oExcel )
    $a1Data = _ExcelReadSheetToArray( $oExcel )

    [/autoit] [autoit][/autoit] [autoit]

    ; _ArrayDisplay($a1Data)
    ; Daten in eine csv-Datei Ausgeben
    $hFile = FileOpen(@ScriptDir & '\Adressen.csv', 2)
    If $hFile = -1 Then Exit 1

    [/autoit] [autoit][/autoit] [autoit]

    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)

    [/autoit] [autoit][/autoit] [autoit]

    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    $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

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(4000)
    _ExcelBookClose($oExcel)
    WinClose('Microsoft Excel')

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • GUICtrlSetTip verschwindet und wird nicht mehr angezeigt.

    • vigesimo
    • 11. Februar 2010 um 10:19

    Hallo Herra
    vielleicht hilft es dir weiter. Ich nutze W2k und bei mir funktioniert es einwandfrei. Also nach ca. 5 s verschwindet es und wenn der Cursor wieder über dem Icon ist, erscheint der TipText wieder.

    Muss wohl ein Problem von XP oder Vista sein.

  • Text einfügen, löschen, ersetzten

    • vigesimo
    • 4. Februar 2010 um 15:13

    Hallo
    das ist ein schönes Beispiel für die Anwendung der Datei-Funktionen. Du suchst mit den Befehlen FileFindFirstFile und FileFindNextFile die 300 Dateien und liest sie mit FileOpen und FileReadLine zeilenweise ein. Dann prüfst du die Zeilen mit den Stringfunktionen und änderst sie entsprechend. Die Ergebnisse gibst du in eine neue Datei in einem anderen Verzeichnis mit FileWriteLine aus.
    Macht ein wenig Arbeit, aber die Funktionen sind in der AutoIt-Hilfe recht gut beschrieben.

  • GUISwitch wechselt nicht die aktive GUI

    • vigesimo
    • 4. Februar 2010 um 14:43
    Zitat von Dr.Doktor


    Das verstehe ich aus zwei Gründen nicht:
    1.: Sollte beim zweiten Aufruf das GUIDelete($Form2) nicht mehr aufgerufen werden, da isDeclared("Form2") <> True ist.
    2. Erfolgt das wechseln mittels GUISwitch() NACH dem Aufruf des ungültigen(?) GUIDelete().

    Hallo
    zu 1.)
    Die Variable $Form2 wurde angelegt und existiert weiter, d.h. = True
    zu 2.)
    Das Wechseln zum GUISwitch erfolgt nur beim ersten Close. Beim zweiten Close wird nur die Bedingung abgearbeitet, egal was darin steht (d.h. unabhängig davon, ob der erste Teil True oder False ist) . Da im 2.Teil eine Funktion drin steht, wird diese auch ausgeführt und damit geht der Fokus auf das Main-Window verloren.

  • Word-Dok. ergänzen

    • vigesimo
    • 4. Februar 2010 um 10:07

    Hallo
    mir ist nicht so ganz klar, was du meinst.Ich vermute mal, dass du die Wordfunktionen umgehen und über AutoIt ausführen willst. Das dürfte aber nicht gehen, da Word dafür zu komplex ist.

    Du musst also die in Word eingebauten Funktionen nutzen (Serienbrieffunktion, VBA). Du kannst Daten aus einer mit AutoIt erstellten Datei am Einfachsten mit der Serienbrieffunktion in Word übernehmen. Zum Auslesen von Daten aus Word musst du vorher ein Makro schreiben, das du dann über AutoIt starten kannst. Die gewünschten Daten werden in eine Datei geschrieben, die du anschliessend mit AutoIt auswerten kannst.

  • GUISwitch wechselt nicht die aktive GUI

    • vigesimo
    • 4. Februar 2010 um 08:24
    Zitat von Dr.Doktor

    Hallo,
    ich habe folgendes Problem:

    If IsDeclared("Form2") AND GUIDelete($Form2) Then
    MsgBox(0,"",GUISwitch($Form1))
    ContinueCase
    EndIf

    Beim ersten Close wird Form2 geschlossen. Beim zweiten Close wird die If-Abfrage erneut durchlaufen und der Befehl GUIDelete($Form2) ausgeführt. Damit wird ein nicht mehr vorhandenes Fenster aktiviert.

    Richtig ist die Abfrage:
    $aMsg = GUIGetMsg(1)

    und

    If $aMsg[1] = $Form2 Then

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™