Excel-hin und her kopieren

  • Hallo zusammen,

    ich unternehme grade meine ersten Gehversuche mit autoit.

    Ich möchte mein erstes kleines scipt einmal zeigen, da ich leider nicht rausbekomme, wieso es nicht das tut was ich möchte:


    Ich habe 2 excel-dateinen im angebenen Pfad erzeugt und in der einen einige Zellen ausgefüllt (diejenigen, die ich in dem Array speichern möchte.

    Dann soll dieser Array im 2.ten Excel-File ausgegeben werden - klappt leider nicht ganz...

  • Ein andere Möglichkeit wäre wohl


    funzt leider aber auch nicht, obwohl hierbei schon das scheinbar erforderliche _ExcelBookOpen vorangeht.


    Gruß

  • Sieh Dir mal die Syntax von _ExcelBookOpen an. Das Skript sollte in etwa so aussehen:

    [autoit]

    #include <File.au3>
    #include <Excel.au3>
    #include <Array.au3>

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

    $oExcel = _ExcelBookOpen("G:\coding\Excel\neu.xlsx")
    $oExcel2 = _ExcelBookOpen("G:\coding\Excel\neu2.xlsx")

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

    $aArray = _ExcelReadSheetToArray($oExcel, 3, 2, 7, 5)
    $aArray2 = _ExcelWriteArray($oExcel2, 2, 2, $aArray)
    _ExcelWriteSheetFromArray($oExcel2, $aArray, 2, 3)

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

    _ExcelBookClose($oExcel2)
    _ExcelBookClose($oExcel)

    [/autoit]
  • Danke für den Ansatz water,

    ich habe ein bisschen weiter gemacht und dieses kleine script geschrieben:

    Spoiler anzeigen


    Eigentlich habe ich hier wieder das gleiche Problem. Soweit funktioniert erstma, dass die GUI aufgeht und man mit der Speicherntaste eine vorgefertigte Exceldatei aufrufen kann.

    Allerdings sollte er dann den Array $aData in das Excelsheet schreiben, was er leiter nicht tut.


    Weiß jmd vllt warum?


    MfG

  • Du hast wieder das selbe Problem wie beim ersten Versuch.
    Du musst _ExcelBookOpen den zu öffnenden Dateinamen angeben. Zurück bekommst Du dann ein Object das Du bei allen anderen Befehlen angeben musst.

    [autoit]

    $oExcelObject = _ExcelBookOpen($oXls)
    _ExcelWriteArray($oExcelObject, $iStartRow, $iStartColumn, $aData, 0, 1)

    [/autoit]
  • Ah ok. Das ist ja eigentlich sehr praktisch, da ich dann das Objekt auch mit der With EndWith Schleife im Anschluss noch bearbeiten kann.

    Nun ist das erst ein Vorbau, den ich nach und nach weiter bearbeiten werden muss. Leider muss ich die Dinge die das Script machen soll immer vom einfachen in kompliziertere runterbröseln, da ichs sonst nicht überschaue :)

    Aber das Objekt tut nun was es soll und schreibt die Daten in das Excelsheet.

    Dort weise ich den Elementen nochmal eine andere Zelle zu (über Excel) um eine andere Übersicht zu erhalten und speicher das Sheet dann ab.


    Als nächstes werde ich die Labels vor dem Speichern abfragen und die Abfragewerte in neuen Variablen speichern, die letztlich ein neues Datenarray füllen sollen.

  • Hier nun mal der erste funktionierende Ansatz:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <File.au3>
    #include <Excel.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $gegf1 = "geg"
    $gutf1 = "gut"
    $gegf2 = "geg"
    $gutf2 = "gut"
    $gegf3 = "geg"
    $gutf3 = "gut"
    $gegs1 = "geg"
    $guts1 = "gut"
    $gegs2 = "geg"
    $guts2 = "gut"
    $gegs3 = "geg"
    $guts3 = "gut"
    $gegn1 = "geg"
    $gutn1 = "gut"
    $gegn2 = "geg"
    $gutn2 = "gut"
    $gegn3 = "geg"
    $gutn3 = "gut"
    $datum = "tt.mm.jjjj"

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

    Global $oXls = "G:\coding\Strgg Tageszahlen\speichern.xls"

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

    $Form1 = GUICreate("Tageszahlen", 434, 292, 1950, 181)
    GUISetBkColor(0xA6CAF0)
    $Label3 = GUICtrlCreateLabel("Früh", 9, 24, 30, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Label4 = GUICtrlCreateLabel("Spät", 12, 74, 32, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Label5 = GUICtrlCreateLabel("Nacht", 10, 125, 39, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Label1 = GUICtrlCreateLabel("GA 1", 8, 2, 37, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("GA 2", 151, 2, 37, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Label6 = GUICtrlCreateLabel("GA 3", 293, 2, 37, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Label7 = GUICtrlCreateLabel("Früh", 151, 25, 30, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Label9 = GUICtrlCreateLabel("Nacht", 151, 126, 39, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Label10 = GUICtrlCreateLabel("Früh", 294, 25, 30, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Label12 = GUICtrlCreateLabel("Nacht", 294, 126, 39, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Label13 = GUICtrlCreateLabel("Datum", 10, 189, 48, 20)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")

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

    $B1 = GUICtrlCreateButton("Speichern", 0, 248, 113, 41, 0)
    $B2 = GUICtrlCreateButton("Speichern / Schließen", 125, 248, 153, 41, 0)
    $B3 = GUICtrlCreateButton("Abbrechen", 287, 248, 113, 41, 0)

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

    $Input1 = GUICtrlCreateInput($gegf1, 8, 49, 49, 21)
    $Input2 = GUICtrlCreateInput($gutf1, 73, 49, 49, 21)
    $Input3 = GUICtrlCreateInput($gegf2, 153, 49, 49, 21)
    $Input4 = GUICtrlCreateInput($gutf2, 218, 49, 49, 21)
    $Input5 = GUICtrlCreateInput($gegf3, 294, 49, 49, 21)
    $Input6 = GUICtrlCreateInput($gutf3, 359, 49, 49, 21)

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

    $Input7 = GUICtrlCreateInput($gegs1, 8, 94, 49, 21)
    $Input8 = GUICtrlCreateInput($guts1, 71, 94, 49, 21)
    $Input9 = GUICtrlCreateInput($gegs2, 151, 94, 49, 21)
    $Input10 = GUICtrlCreateInput($guts2, 216, 94, 49, 21)
    $Input11 = GUICtrlCreateInput($gegs3, 292, 94, 49, 21)
    $Input12 = GUICtrlCreateInput($guts3, 357, 94, 49, 21)

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

    $Input13 = GUICtrlCreateInput($gegn1, 6, 146, 49, 21)
    $Input14 = GUICtrlCreateInput($gutn1, 71, 146, 49, 21)
    $Input15 = GUICtrlCreateInput($gegn2, 151, 146, 49, 21)
    $Input16 = GUICtrlCreateInput($gutn2, 216, 146, 49, 21)
    $Input17 = GUICtrlCreateInput($gegn3, 292, 146, 49, 21)
    $Input18 = GUICtrlCreateInput($gutn3, 357, 146, 49, 21)

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

    $Input21 = GUICtrlCreateInput($datum, 5, 208, 97, 24)

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

    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    case $B1

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

    $iL1 = GUICtrlRead ($Input1)
    Select
    Case $iL1 > 0
    Case $iL1 < 0
    $iL1 = 0
    case IsString($iL1)
    $iL1 = 0
    EndSelect
    $iL2 = GUICtrlRead ($Input2)
    Select
    Case $iL2 > 0
    Case $iL2 < 0
    $iL2 = 0
    case IsString($iL2)
    $iL2 = 0
    EndSelect
    $iL3 = GUICtrlRead ($Input3)
    Select
    Case $iL3 > 0
    Case $iL3 < 0
    $iL3 = 0
    case IsString($iL3)
    $iL3 = 0
    EndSelect
    $iL4 = GUICtrlRead ($Input4)
    Select
    Case $iL4 > 0
    Case $iL4 < 0
    $iL4 = 0
    case IsString($iL4)
    $iL4 = 0
    EndSelect
    $iL5 = GUICtrlRead ($Input5)
    Select
    Case $iL5 > 0
    Case $iL5 < 0
    $iL5 = 0
    case IsString($iL5)
    $iL5 = 0
    EndSelect
    $iL6 = GUICtrlRead ($Input6)
    Select
    Case $iL6 > 0
    Case $iL6 < 0
    $iL6 = 0
    case IsString($iL6)
    $iL6 = 0
    EndSelect
    $iL7 = GUICtrlRead ($Input7)
    Select
    Case $iL7 > 0
    Case $iL7 < 0
    $iL7 = 0
    case IsString($iL7)
    $iL7 = 0
    EndSelect
    $iL8 = GUICtrlRead ($Input8)
    Select
    Case $iL8 > 0
    Case $iL8 < 0
    $iL8 = 0
    case IsString($iL8)
    $iL8 = 0
    EndSelect
    $iL9 = GUICtrlRead ($Input9)
    Select
    Case $iL9 > 0
    Case $iL9 < 0
    $iL9 = 0
    case IsString($iL9)
    $iL9 = 0
    EndSelect
    $iL10 = GUICtrlRead ($Input10)
    Select
    Case $iL10 > 0
    Case $iL10 < 0
    $iL10 = 0
    case IsString($iL10)
    $iL10 = 0
    EndSelect
    $iL11 = GUICtrlRead ($Input11)
    Select
    Case $iL11 > 0
    Case $iL11 < 0
    $iL11 = 0
    case IsString($iL11)
    $iL11 = 0
    EndSelect
    $iL12 = GUICtrlRead ($Input12)
    Select
    Case $iL12 > 0
    Case $iL12 < 0
    $iL12 = 0
    case IsString($iL12)
    $iL12 = 0
    EndSelect
    $iL13 = GUICtrlRead ($Input13)
    Select
    Case $iL13 > 0
    Case $iL13 < 0
    $iL13 = 0
    case IsString($iL13)
    $iL13 = 0
    EndSelect
    $iL14 = GUICtrlRead ($Input14)
    Select
    Case $iL14 > 0
    Case $iL14 < 0
    $iL14 = 0
    Case IsString($iL14)
    $iL14 = 0
    EndSelect
    $iL15 = GUICtrlRead ($Input15)
    Select
    Case $iL15 > 0
    Case $iL15 < 0
    $iL15 = 0
    case IsString($iL15)
    $iL15 = 0
    EndSelect
    $iL16 = GUICtrlRead ($Input16)
    Select
    Case $iL16 > 0
    Case $iL16 < 0
    $iL16 = 0
    case IsString($iL16)
    $iL16 = 0
    EndSelect
    $iL17 = GUICtrlRead ($Input17)
    Select
    Case $iL17 > 0
    Case $iL17 < 0
    $iL17 = 0
    case IsString($iL17)
    $iL17 = 0
    EndSelect
    $iL18 = GUICtrlRead ($Input18)
    Select
    Case $iL18 > 0
    Case $iL18 < 0
    $iL18 = 0
    case IsString($iL18)
    $iL18 = 0
    EndSelect

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

    Global $aData2[18] = [$iL1, $iL2, $iL3, $iL4, $iL5, $iL6, $iL7, $iL8, $iL9, $iL10, $iL11, $iL12, $iL13, $iL14, $iL15, $iL16, $iL17, $iL18]
    $iLDatum = GUICtrlRead ($Input21)

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

    $oXObj = _ExcelBookOpen($oXls)

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

    Sleep (200)
    _ExcelWriteArray($oXObj, 15, 1, $aData2, 1, 0)
    _ExcelBookSaveAs($oXObj, "G:\coding\Strgg Tageszahlen\speichern\tageszahlen_" & $iLDatum & ".xls", "xls", 0, 1, "", "", 1, 2)

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

    Sleep (2000)

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

    _ExcelBookClose($oXObj)

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

    case $B2
    $iL1 = GUICtrlRead ($Input1)
    Select
    Case $iL1 > 0
    Case $iL1 < 0
    $iL1 = 0
    case IsString($iL1)
    $iL1 = 0
    EndSelect
    $iL2 = GUICtrlRead ($Input2)
    Select
    Case $iL2 > 0
    Case $iL2 < 0
    $iL2 = 0
    case IsString($iL2)
    $iL2 = 0
    EndSelect
    $iL3 = GUICtrlRead ($Input3)
    Select
    Case $iL3 > 0
    Case $iL3 < 0
    $iL3 = 0
    case IsString($iL3)
    $iL3 = 0
    EndSelect
    $iL4 = GUICtrlRead ($Input4)
    Select
    Case $iL4 > 0
    Case $iL4 < 0
    $iL4 = 0
    case IsString($iL4)
    $iL4 = 0
    EndSelect
    $iL5 = GUICtrlRead ($Input5)
    Select
    Case $iL5 > 0
    Case $iL5 < 0
    $iL5 = 0
    case IsString($iL5)
    $iL5 = 0
    EndSelect
    $iL6 = GUICtrlRead ($Input6)
    Select
    Case $iL6 > 0
    Case $iL6 < 0
    $iL6 = 0
    case IsString($iL6)
    $iL6 = 0
    EndSelect
    $iL7 = GUICtrlRead ($Input7)
    Select
    Case $iL7 > 0
    Case $iL7 < 0
    $iL7 = 0
    case IsString($iL7)
    $iL7 = 0
    EndSelect
    $iL8 = GUICtrlRead ($Input8)
    Select
    Case $iL8 > 0
    Case $iL8 < 0
    $iL8 = 0
    case IsString($iL8)
    $iL8 = 0
    EndSelect
    $iL9 = GUICtrlRead ($Input9)
    Select
    Case $iL9 > 0
    Case $iL9 < 0
    $iL9 = 0
    case IsString($iL9)
    $iL9 = 0
    EndSelect
    $iL10 = GUICtrlRead ($Input10)
    Select
    Case $iL10 > 0
    Case $iL10 < 0
    $iL10 = 0
    case IsString($iL10)
    $iL10 = 0
    EndSelect
    $iL11 = GUICtrlRead ($Input11)
    Select
    Case $iL11 > 0
    Case $iL11 < 0
    $iL11 = 0
    case IsString($iL11)
    $iL11 = 0
    EndSelect
    $iL12 = GUICtrlRead ($Input12)
    Select
    Case $iL12 > 0
    Case $iL12 < 0
    $iL12 = 0
    case IsString($iL12)
    $iL12 = 0
    EndSelect
    $iL13 = GUICtrlRead ($Input13)
    Select
    Case $iL13 > 0
    Case $iL13 < 0
    $iL13 = 0
    case IsString($iL13)
    $iL13 = 0
    EndSelect
    $iL14 = GUICtrlRead ($Input14)
    Select
    Case $iL14 > 0
    Case $iL14 < 0
    $iL14 = 0
    Case IsString($iL14)
    $iL14 = 0
    EndSelect
    $iL15 = GUICtrlRead ($Input15)
    Select
    Case $iL15 > 0
    Case $iL15 < 0
    $iL15 = 0
    case IsString($iL15)
    $iL15 = 0
    EndSelect
    $iL16 = GUICtrlRead ($Input16)
    Select
    Case $iL16 > 0
    Case $iL16 < 0
    $iL16 = 0
    case IsString($iL16)
    $iL16 = 0
    EndSelect
    $iL17 = GUICtrlRead ($Input17)
    Select
    Case $iL17 > 0
    Case $iL17 < 0
    $iL17 = 0
    case IsString($iL17)
    $iL17 = 0
    EndSelect
    $iL18 = GUICtrlRead ($Input18)
    Select
    Case $iL18 > 0
    Case $iL18 < 0
    $iL18 = 0
    case IsString($iL18)
    $iL18 = 0
    EndSelect

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

    Global $aData2[18] = [$iL1, $iL2, $iL3, $iL4, $iL5, $iL6, $iL7, $iL8, $iL9, $iL10, $iL11, $iL12, $iL13, $iL14, $iL15, $iL16, $iL17, $iL18]
    $iLDatum = GUICtrlRead ($Input21)

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

    $oXObj = _ExcelBookOpen($oXls)

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

    Sleep (200)
    _ExcelWriteArray($oXObj, 15, 1, $aData2, 1, 0)
    _ExcelBookSaveAs($oXObj, "G:\coding\Strgg Tageszahlen\speichern\tageszahlen_" & $iLDatum & ".xls", "xls", 0, 1, "", "", 1, 2)

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

    Sleep (2000)

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

    _ExcelBookClose($oXObj)
    Exit
    case $B3
    Exit

    EndSwitch
    WEnd

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


    Wahrscheinlich kann man noch etliche Zeilen sparen aber immerhin funzt es schonmal.

    Als nächstes soll die gespeicherte Excel-Datei von einem anderen Script aufgerufen werden, dass die Daten ausliest und in eine andere Excel-Datei schreibt.

    Diese soll dann wieder ein paar Berechnungen durchführen und dann ein paar Ergebnisse in einer GUI ausgeben.

  • Ich habe noch ein Problem mit der Validierung der Eingabeparameter auf Sinnhaftigkeit.

    Spoiler anzeigen
    [autoit]


    case $B1

    $iLDatum = GUICtrlRead ($Input21)
    Do
    MsgBox(0,"Eingabefehler", "Bitte geben Sie noch das Datum ein!" & @CRLF & @CRLF & "Bitte beachten Sie das Format 'ttmmyy' für das Datum")
    Until $iLDatum <> "ttmmyy"

    Sleep (200)
    $oXObj = _ExcelBookOpen($oXls)

    [/autoit]

    Für den Fall B1, also case $B1 soll der Parameter $iLDatum geprüft werden. Nun möchte ich für den Fall das bei der Datumsanzeige immernoch, wie vorgegeben, ttmmyy steht , eine MsgBox generieren, die mich darauf hinweist und mir dann ermöglicht, dass Datum nochmal einzutragen.

    Erst wenn das geschehen ist, soll das Programm fortgesetzt werden.

  • Moin moin,

    ich versuche mich gerade an einer Möglichkeit etwas aus Excel auszulesen.

    Ich gebe zunächst per GUI ein Datum ein, dass ich dann in einer Ecxel-Datei suchen möchte.

    Das Datum steht immer in Spalte "B" und wird absteigend fortgeführt.

    Ich möchte jetzt in eine bestimmte Zelle in B und ein Datum auslesen. welches ich in eine Variable schreibe. Diese soll mit der zuvor eingebenen Datums-Variable vergleichen werden.

    Wenn sie nicht passt soll 3 Zeile weiter unten in der gleichen Spalte gefragt werden.

    Wenn sie passt soll eine andere Aktion erfolgen, die ich soweit schon geschrieben habe.


    Hier mal mein Ansatz, der leider nicht ganz funzt....vielleicht sieht jmd was zu tun ist :)

    Spoiler anzeigen
    [autoit]


    $oXObj2 = _ExcelBookOpen($oXls2)
    With $oXObj2
    .Range("B2387:B2387").Select
    $readcell = _ExcelReadCell($oXObj2, "B2387:B2387")

    For $readcell <> $data To $readcell = $data
    Send("{DOWN}")
    Send("{DOWN}")
    Send("{DOWN}")
    Next
    Send("{TAB}")

    ;_ExcelBookClose($oXObj2)
    EndWith

    [/autoit]