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. wuffel_junior90

Beiträge von wuffel_junior90

  • In Excel ab einer bestimmten Zelle schreiben.

    • wuffel_junior90
    • 28. September 2016 um 12:27

    Hallo liebe Community,

    ich versuche derzeit einen Ausbildungsnachweis Bot für mich zu verbessern. Dieser Bot wurde schon einmal hier im Forum erwähnt, daher habe ich mir diese Vorlage genommen.
    Um nun zu meinem Problem zu kommen...

    Wie sage ich AutoIt das er ab einer bestimmten Zelle beginnen soll zu schreiben und danach nur bestimmte Zeilen nach unten geht?
    Stehe da vor einer Wand die ich nicht bezwingen kann ^^
    Der Code sieht derzeit so aus:

    AutoIt: Ausbildungsnachweis
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_Comment=Datei zum automatischen erstellen von Ausbildungsnachweisen
    #AutoIt3Wrapper_Res_Fileversion=0.1
    #AutoIt3Wrapper_Res_LegalCopyright=Andreas Urbschat
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Run_Tidy=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Excel.au3>
    #include <ExcelConstants.au3>
    #include <Array.au3>
    #include <MsgBoxConstants.au3>
    #include <file.au3>
    #include <ButtonConstants.au3>
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <GUIDateTimePicker.au3>
    Global $Array[10]
    Global $sExcelblock, $s, $Excelfind, $ExcelDelete, $Excel
    Local $oExcel = _Excel_Open()
    If @error Then Exit MsgBox(0, "Fehler", "Excel Objekt kann nicht erstellt werden")
    Local $aDatei, $i, $sWert, $iRandom, $q, $aPruefen[0], $iTage, $DateTime, $aDatumHeute
    Local $iAbNr
    Local $sFilePath = @ScriptDir & "\Taetigkeiten.txt"
    Local $sExcelDatei = @ScriptDir & "\Ausbildungsnachweis Vorlage.xlsx"
    Local $sINIDatei = @ScriptDir & "\Ausbildungsnachweis.ini"
    Local $iZeilenanfang, $iZeilenende
    ; Erstellt mit Koda, ging schneller und war schneller was Optik angeht
    $Ausbildungsnachweis = GUICreate("Ausbildungsnachweis Bot", 1035, 470, 194, 126)
    $Date1 = GUICtrlCreateMonthCal("", 256, 192, 257, 164, 0) ;GUICtrlCreateDate
    GUICtrlSetFont(-1, 11, 400, 0, "MS Sans Serif")
    $Label1 = GUICtrlCreateLabel("ab Datum:", 16, 256, 237, 17)
    GUICtrlSetFont(-1, 11, 400, 0, "MS Sans Serif")
    $Menge = GUICtrlCreateInput("", 256, 112, 49, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER))
    GUICtrlSetFont(-1, 11, 400, 0, "MS Sans Serif")
    $Label4 = GUICtrlCreateLabel("wie viele Ausbildungsnachweise", 16, 120, 235, 17)
    GUICtrlSetFont(-1, 11, 400, 0, "MS Sans Serif")
    $Taetigkeiten = GUICtrlCreateEdit(FileRead($sFilePath), 520, 40, 489, 385)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Label5 = GUICtrlCreateLabel("anschliessend Drucken", 16, 368, 144, 20)
    GUICtrlSetFont(-1, 11, 400, 0, "MS Sans Serif")
    $AusbNr = GUICtrlCreateInput("", 256, 152, 49, 24, BitOR($GUI_SS_DEFAULT_INPUT, $ES_NUMBER))
    GUICtrlSetFont(-1, 11, 400, 0, "MS Sans Serif")
    $Label6 = GUICtrlCreateLabel("ab Ausbildungsnachweisnummer", 16, 160, 235, 17)
    GUICtrlSetFont(-1, 11, 400, 0, "MS Sans Serif")
    $Drucken = GUICtrlCreateCheckbox("Drucken", 256, 368, 17, 33)
    GUICtrlSetFont(-1, 11, 400, 0, "MS Sans Serif")
    $OK = GUICtrlCreateButton("OK", 8, 408, 177, 41)
    $Ende = GUICtrlCreateButton("Beenden", 256, 408, 177, 41)
    GUISetState(@SW_SHOW)
    _Voreinstellung()
    _GUIAuslesen()
    _ExcelAnzahl()
    MsgBox(0, "Beenden", "Programm wird jetzt beendet")
    _Excel_Close($oExcel, Default, True)
    #cs
    	Diese Funktion nimmt aus der GUI die Anzahl der zu erstellenden
    	Ausbildungsnachweise und erstellt die entsprechende Menge
    #ce
    Func _ExcelAnzahl()
    	For $i = 1 To GUICtrlRead($Menge)
    		_neuesExcelSheet()
    		_AktivitaetenWoche()
    		_ExcelBefuellen()
    		If (GUICtrlRead($Drucken)) = $GUI_CHECKED Then _Drucken($oExcel, $Excel)
    		$DateTime = @MDAY & @MON & @YEAR & "-" & @HOUR & @MIN & @SEC
    		_ExcelSaveAsEX($oExcel, "xlsx", @ScriptDir & "\" & $DateTime)
    		$NewDate = _DateAdd('d', 7, GUICtrlRead($Date1))
    		GUICtrlSetData($Date1, $NewDate)
    		GUICtrlSetData($AusbNr, GUICtrlRead($AusbNr) + 1)
    		GUISetState(@SW_SHOW)
    	Next
    EndFunc   ;==>_ExcelAnzahl
    #cs
    	Erstellt einen neuen ExcelSheet
    #ce
    Func _neuesExcelSheet()
    	Global $Excel = _Excel_BookOpen($oExcel, $sExcelDatei)
    	Return
    EndFunc   ;==>_neuesExcelSheet
    #cs
    	Jedes Feld der GUI wird ausgelesen. Wenn ein ein Feld nicht ausgefüllt wurde kommt
    	eine entsprechende Meldung
    #ce
    Func _GUIAuslesen()
    	While 1
    		$msg = GUIGetMsg()
    		Select
    			Case $msg = $OK
    				If GUICtrlRead($Menge) = "" Then
    					MsgBox(0, "Menge?", "Bitte angeben wieviele Ausbilgungsnachweise erstellt werden sollen!")
    				EndIf
    				If GUICtrlRead($Taetigkeiten) = "" Then
    					MsgBox(0, "Taetigkeiten?", "Es sind keine Taetigkeiten vorhanden!")
    				EndIf
    				If (GUICtrlRead($Drucken)) <> $GUI_CHECKED Then
    					MsgBox(0, "Drucken?", "Die Ausbildungsnachweise werden nur gespeichert nicht gedruckt!")
    				EndIf
    				_GUIDatenSpeichern()
    				ExitLoop
    			Case $msg = $GUI_EVENT_CLOSE
    				MsgBox(0, "GUI Event", "Du hast auf CLOSE geklickt! Programm wird beendet...")
    				_GUIDatenSpeichern()
    				_Ende()
    			Case $msg = $Ende
    				MsgBox(0, "GUI Event", "Du hast auf CLOSE geklickt! Programm wird beendet...")
    				_GUIDatenSpeichern()
    				_Ende()
    		EndSelect
    	WEnd
    EndFunc   ;==>_GUIAuslesen
    #cs
    	Stellt zufällig 4-6 Tätigkeiten aus dem GUIEdit zusammen.
    	entfernt doppelte Einträge aus dem Arbeitstag und stellt sie als ExcelBlock zur Verfügung.
    	Hintergrund: Die Arbeitswoche beträgt bei uns 5 Arbeitstage, nun soll ja nicht jeder Tag gleich aussehen.
    	Die Ausbildungsnachweisvorlage der IHK sieht max. 6 Einträge je Arbeitstag vor.
    	Die Tätigkeiten sollten min. 20 verschiedene beinhalten, da die Zusammenstellung sonst zulange dauern würde.
    	Tätigkeiten < = 4 führen zwangsweise zu einer Endlosschleife
    #ce
    Func _AktivitaetenWoche()
    	For $iTage = 1 To 5 ;Anzahl der Arbeitstage
    		;
    		For $i = 0 To $s ;Jeder Eintrag das Array in der Vorherigenschleife wird gelöscht
    			_ArrayDelete($aPruefen, 0)
    		Next
    		$sWert = ""
    		$s = 0
    		$q = ""
    		$iRandom = ""
    		_FileReadToArray($sFilePath, $aDatei) ;Datei in Array einlesen
    		_ArrayDelete($aDatei, 0)
    		$sWert = UBound($aDatei) ;Bestimmen wie gross das Array ist
    		$s = Random(4, 6, 1) ;$Pruefen soll zwischen 4 und 6 Eintraege haben
    		;Zufaellig Eintraege in ein neues Array einfuegen
    		Do
    			$iRandom = Random(0, $sWert, 1) - 1
    			If $iRandom = -1 Then $iRandom = 0
    			$q = $aDatei[$iRandom]
    			_ArrayDelete($aPruefen, _ArraySearch($aPruefen, $q, 0, 0)) ;Loescht doppelten Eintrag
    			_ArrayAdd($aPruefen, $q) ;fuegt den neuen Eintrag hinzu
    		Until UBound($aPruefen) = $s
    		_NaechstenExcelBlockBerechnen($s, $iTage)
    		_ExcelBefuellen()
    	Next
    EndFunc   ;==>_AktivitaetenWoche
    #cs
    	Berechnet den nächsten ExcelBlock.
    	Es wird davon ausgegangen, dass es unterschiedliche 6 Arbeiten am Tag gibt.
    #ce
    Func _NaechstenExcelBlockBerechnen($s, $iTage)
    	Select ;sollte aus irgend einem Grund $iTage(Arbeitswoche) <1 oder >6 sein wird alles auf 0 gesetzt
    		Case $iTage < 4
    			$iZeilenanfang = 0
    			$iZeilenende = 0
    		Case $iTage > 6
    			$iZeilenanfang = 0
    			$iZeilenende = 0
    	EndSelect
    	$iZeilenanfang = $iTage * 9
    	$iZeilenende = $iZeilenanfang + $s - 1
    	$sExcelblock = "B" & $iZeilenanfang & ":B" & $iZeilenende
    	Return $sExcelblock
    EndFunc   ;==>_NaechstenExcelBlockBerechnen
    Func _ExcelBefuellen()
    	Local $sStyle = "yyyy"
    	_Excel_RangeWrite($Excel, $Excel.Activesheet, GUICtrlRead($Date1), "F5:F5")
    	_Excel_RangeWrite($Excel, $Excel.Activesheet, GUICtrlRead($AusbNr), "D5:D5")
    	_Excel_RangeWrite($Excel, $Excel.Activesheet, $aPruefen, $sExcelblock) ;$sExcelblock) ; der Eintrag von $aPruefen wird in die Exceltabelle geschrieben
    EndFunc   ;==>_ExcelBefuellen
    Func _Voreinstellung()
    	If FileExists($sINIDatei) Then
    		GUICtrlSetData($Menge, IniRead($sINIDatei, "Menge", "Menge", "1"))
    		GUICtrlSetData($AusbNr, IniRead($sINIDatei, "AusbNr", "AusbNr", ""))
    		GUICtrlSetData($Drucken, IniRead($sINIDatei, "Drucken", "Drucken", $GUI_CHECKED))
    		GUICtrlSetData($Date1, IniRead($sINIDatei, "Datum", "Datum", ""))
    		GUISetState(@SW_SHOW)
    	Else
    		_GUIDatenSpeichern()
    	EndIf
    EndFunc   ;==>_Voreinstellung
    Func _GUIDatenSpeichern()
    	IniWrite($sINIDatei, "Menge", "Menge", GUICtrlRead($Menge))
    	IniWrite($sINIDatei, "AusbNr", "AusbNr", GUICtrlRead($AusbNr) + 1)
    	IniWrite($sINIDatei, "Drucken", "Drucken", GUICtrlRead($Drucken))
    	IniWrite($sINIDatei, "Datum", "Datum", GUICtrlRead($Date1))
    	FileDelete($sFilePath) ; Soll verhindern, dass eventuell doppelte Daten gespeichert werden
    	FileWrite($sFilePath, GUICtrlRead($Taetigkeiten))
    EndFunc   ;==>_GUIDatenSpeichern
    ;Drucken des aktuellen ExcelSheets
    Func _Drucken($oExcel, $Excel)
    	_Excel_Print($oExcel, $Excel, 1)
    EndFunc   ;==>_Drucken
    #cs
    	Diese Funktion hab ich mir geklaut :)
    	Es gab Probleme mit dem speichern der ExcelDateien
    	An dieser Stelle DANKE TheLuBu
    #ce
    ; Function Name:   _ExcelSaveAsEX($oExcel, $Fileformat, $NewFilepath, $Close = True)
    ; Description:     Speichert eine Exceldatei in einem bestimmten Format ab
    ; Parameter(s):    $oExcel       Ein Excelobject, wie es von _ExcelbookOpen oder _ExcelbookNew zurückgegeben wird
    ;                  $Fileformat   Der Dateityp, in dem gespeichert werden soll (xlsx, xlsb, xlsm, xls, csv, txt, prn)
    ;                  $NewFilepath  Speicherort und Dateiname der neuen Datei
    ;                  $Close = True Soll nach dem Speichern das Objekt geschlossen werden? (Standard = True)
    ; Return Value(s): Erfolg  Gibt 1 zurück
    ;                  Fehler      @error  1 - $oExcel ist kein Objekt
    ;                                      2 - $Fileformat ist keine bekannte Dateiendung oder Formatnummer
    ; Author(s):       TheLuBu (LuBu@veytal.com)
    ; Copyright:       TheLuBu (LuBu@veytal.com)
    ;===============================================================================
    Func _ExcelSaveAsEX($oExcel, $Fileformat, $NewFilepath, $Close = False)
    	If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    	Switch $Fileformat
    		Case 51, "xlsx", ".xlsx"
    			$Fileformat = 51
    		Case 50, "xlsb", ".xlsb"
    			$Fileformat = 50
    		Case 52, "xlsm", ".xlsm"
    			$Fileformat = 52
    		Case 6, "csv", ".csv"
    			$Fileformat = 6
    		Case -4158, "txt", ".txt"
    			$Fileformat = -4158
    		Case 56, "xls", ".xls"
    			$Fileformat = 56
    		Case Else
    			Return SetError(2, 0, 0)
    	EndSwitch
    	With $oExcel
    		.Application.DisplayAlerts = False ; Schaltet Fehlermeldungen bei Excel aus
    		.ActiveWorkBook.SaveAs($NewFilepath, $Fileformat)
    		If $Close Then
    			.ActiveWorkbook.Close ; Schließt die Tabelle
    			.Quit ; Schließt das Workbook
    		EndIf
    	EndWith
    	Return 1
    EndFunc   ;==>_ExcelSaveAsEX
    Func _Ende()
    	While 1
    		Exit
    	WEnd
    EndFunc   ;==>_Ende
    Alles anzeigen


    Hoffe Ihr könnt mir helfen, aber nachdem was ich gesehen habe wird das schon was werden. :thumbup:


    Liebe Grüße

    wuffel_junior90

    EDIT: Die Vorlage packe ich am besten nochmal mit rein. Denke dann kann man es besser nachvollziehen.

    Dateien

    Ausbildungsnachweis Vorlage_2.zip 36,61 kB – 216 Downloads

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™