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

Beiträge von vakaba

  • FileWrite zu langsam. Fast 2 Minuten!!!!

    • vakaba
    • 12. Februar 2014 um 14:23

    Das Problem ist zwar schon gelöst aber ich hab es jetzt auch mit dem SaveDialog hinbekommen, was schöner ist als Name und Speicherort getrennt abzufragen. Jetzt wo ich es geschafft habe, verstehe ich nicht, warum ich das vorhin nicht hinbekommen habe... :D

    [autoit]


    $var = FileSaveDialog("Choose name and destination for EEP file", "", "EEP file (*.eep)", "createdEEP")
    If StringRight($var, 4) <> ".eep" Then $var &= ".eep"
    MsgBox(0,"",$var)
    Local $file = FileOpen($var, 1) ;a textfile with the chosen EEP-file name is created with the ending .eep

    [/autoit][autoit][/autoit][autoit][/autoit]
  • FileWrite zu langsam. Fast 2 Minuten!!!!

    • vakaba
    • 12. Februar 2014 um 14:11

    Super gut! Danke water!!!

    Wieder mal bist du mein Retter in der Not!!! :)

    Da bei meinem $zielpfad hinten kein "\" dran ist, musste ich zwischen die zwei Variablen noch & "\" & einsetzen. Aber jetzt klappt es super! :)

    Jetzt versuche ich noch das ganze mit einem FileSaveDialog hinzubekommen. Aber da es jetzt funktioniert, ist dieses Thema nun geschlossen :)

  • FileWrite zu langsam. Fast 2 Minuten!!!!

    • vakaba
    • 12. Februar 2014 um 13:21

    Ja du hast schon Recht, jetzt ist es auf jeden Fall VIIIEEEEL schneller!!! :)

    ABER... jetzt kann ich wieder nicht bestimmen wo $file abgespeichert werden soll. Das wird jetzt einfach da abgespeichert, wo meine ursprüngliche Excel Datei her ist. Aber ich will den User wählen lassen. Am aller liebsten auch über nen FileSaveDialog, weil dort Name und Speicherort ausgewählt werden kann. Aber ich bekomme es nicht hin den ausgewählten Speicherort zu übernehmen... :(

    -------------------------------

    Edit: Nein jetzt ist es schnell genug... das mit in eine Variable schreiben brauche ich glaub nicht mehr. Jetzt fehlt nur noch das Speicherplatz angeben...

  • FileWrite zu langsam. Fast 2 Minuten!!!!

    • vakaba
    • 12. Februar 2014 um 13:07

    Danke für den Tipp...

    Aber könntest du mir sagen, wo ich den FileOpen()-Befehl verwenden muss?

    Einfach das _FileCreate() in Zeile 20 damit zu erstetzen hilft leider geschwindigkeitstechnisch nicht.

    Kann ich den FileOpen Befehl verwenden und dem Befehl irgendwie vorgeben wo gespeichert werden muss?

  • FileWrite zu langsam. Fast 2 Minuten!!!!

    • vakaba
    • 12. Februar 2014 um 11:42

    Hallo Zusammen!

    Ich habe ein Problem mit der Geschwindigkeit meines Programms. Zuerst einmal muss ich sagen, dass es eigentlich sonst einwandfrei klappt... Nur braucht es zum beschreiben eines Files fast 2 Minuten. Es sind zwar über 900 Zeilen... Aber bevor ich ein Paar nötige Änderungen vorgenommen habe, war es in null-komma-nix fertig.

    Jedenfalls hier die kurze Vorgeschichte/Erklärung zum Programm:

    Ich hab ne GUI, in die eine Exceldatei eingebettet ist, an der man Änderungen vornehmen kann. Nachdem man das gemacht hat wird die Exceldatei über ein Excel-Makro als .csv Datei gespeichert. Diese .csv-Datei wird wiederum von meinem Autoit-Skript in einem Array (_FileReadToArray()) gespeichert, aus dem einzelne Werte gelesen werden und dann in eine Textdatei geschrieben werden, die als .eep-Datei abgespeichert wird.

    Diese Textdatei habe ich anfangs einfach nur mit "FileOpen()" kreiert. So wurde sie dann einfach dort abgespeichert, wo meine ursprüngliche Exceldatei herkommt. Jetzt ist es aber so, dass ich die .eep-Datei an einem vom User gewählten Speicherort mit einem vom User gewählten Dateiname speichern soll.

    Eigentlich wollte ich das mit einem FileSaveDialog() machen, aber da wird mein Speicherort nicht übernommen.

    Ich hab jetzt ein Programm, dass den Namen UND den Ort auswählen lässt UND welches auch funktioniert... aber es braucht halt für die FileWrite-Sache ca 2 Minuten.

    Hier ist mal die Funktion aus meinem Skript in der sich das ganze abspielt.

    Spoiler anzeigen
    [autoit]

    Func CreateButtonClicked() ;Function which defines what happens when the "Create EEP file" button is clicked
    MouseClick ( "", 300, 300, 1) ;activates Excel Sheet, so the macros can be played
    $UserInput = GUICtrlRead($UserNameInput) ;input field for user name is read
    ; $EEPInput = GUICtrlRead($EEPNameInput) ;input field for EEP-file name is read
    $Comment = GUICtrlRead($CommentInput) ;input field for comment is read
    ; Asks the user to enter a password. Don't forget to validate it!
    Local $EEPInput = InputBox("Filename", "Pick a name for your EEP File", "")

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

    If $EEPInput == "" Then ;routine that ensures that the EEP file gets a name
    MsgBox(0,"","you have to give your EEP file a name!")
    Else
    $oExcelDoc.Application.Run("SaveAsCsv") ;if the EEP file got a name, a csv file is created
    $zielpfad = FileSelectFolder("Choose the destination", "", 3, @ScriptDir)

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

    ;$var = FileSaveDialog("Choose name and destination for EEP file", "", "EEP file (*.eep)", "createdEEP")
    If StringRight($EEPInput, 4) <> ".eep" Then $EEPInput &= ".eep"
    ;$var.save
    ;Local $file = FileOpen($EEPInput, 1) ;a textfile with the chosen EEP-file name is created with the ending .eep
    local $file = $zielpfad & "" & $EEPInput
    Local $fileCreate = _FileCreate($file)
    ;Local $file = FileOpen($EEPInput & ".eep", 1) ;a textfile with the chosen EEP-file name is created with the ending .eep
    _FileReadToArray(@TEMPdir & "\Test.csv", $array) ;created csv file is saved in an array
    ;insert header in .eep file
    FileWrite($file, "################################################################################" & @CRLF)
    FileWrite($file, "#Created with Excel to EEP programme" & @CRLF)
    FileWrite($file, "#User: " & $UserInput & " Date: " & @MDAY & "." & @MON & "." & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF)
    FileWrite($file, "#Project File: " & $EEPInput & @CRLF)
    FileWrite($file, "#Remarks: " & $Comment & @CRLF)
    FileWrite($file, "################################################################################" & @CRLF)
    FileWrite($file, @CRLF)
    For $zeile = 13 To $array[0] ;array is being worked with
    $wert = StringSplit($array[$zeile], ";") ;values in between semicolons are being separated and
    $number = number($wert[1]) ;values of first collumn of array are converted into a number

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

    Local $Zahl1 = 4096 ;this number is being calculated,
    Local $Zahl2 = 256 ;so that a hex number with 4 characters develops
    Local $Zahl3 = 16 ;this is done with the array which was defined at the top of the programm
    $Ziffer1 = Int($number/$Zahl1) ;(from 0 to F)
    $Rest1 = Mod($number,$Zahl1)
    $Ziffer2 = Int($Rest1/$Zahl2)
    $Rest2 = Mod($Rest1,$Zahl2)
    $Ziffer3 = Int($Rest2/$Zahl3)
    $Ziffer4 = Mod($Rest2,$Zahl3)
    Local $ArrString = $arr[$Ziffer1] & $arr[$Ziffer2] & $arr[$Ziffer3] & $arr[$Ziffer4] ;4 digit hex number (calculated above) is put together

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

    if $ArrString <> "0000" then ;for all the other parameters
    $summe = $summe + $wert[6]
    $value = $wert[6]
    $modulo = mod($summe, 256)
    $intwert = int($summe/256) -1
    Endif
    Next
    For $zeile = 1 To $array[0] ;array is being worked with
    $wert = StringSplit($array[$zeile], ";") ;values in between semicolons are being separated and written into $wert

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

    $number = number($wert[1]) ;values of first collumn of array are converted into a number

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

    Local $Zahl1 = 4096 ;this number is being calculated,
    Local $Zahl2 = 256 ;so that a hex number with 4 characters develops
    Local $Zahl3 = 16 ;this is done with the array which was defined at the top of the programm
    $Ziffer1 = Int($number/$Zahl1) ;(from 0 to F)
    $Rest1 = Mod($number,$Zahl1)
    $Ziffer2 = Int($Rest1/$Zahl2)
    $Rest2 = Mod($Rest1,$Zahl2)
    $Ziffer3 = Int($Rest2/$Zahl3)
    $Ziffer4 = Mod($Rest2,$Zahl3)
    Local $ArrString = $arr[$Ziffer1] & $arr[$Ziffer2] & $arr[$Ziffer3] & $arr[$Ziffer4] ;4 digit hex number (calculated above) is put together

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

    if $wert[2] == "CalculateCRC" then ;first line has to be read separately,
    FileWrite($file, hex($wert[1],4)) ;because its adress is "0"
    FileWrite($file, " " & hex($wert[6],2) & ";") ;and many other non relevant parameters have this adress too
    FileWrite($file, " " & $wert[5] & ";") ;...so the line for the first parameter is done seperately
    FileWrite($file, " " & $wert[4] & @CRLF) ;in this if-statement
    elseif $ArrString == "0006" then
    FileWrite($file, hex($wert[1],4)) ;because this is the checksum
    FileWrite($file, " " & hex($intwert,2) & ";") ;it has to be calculated differently
    FileWrite($file, " " & "Checksum" & ";") ;...so it is done seperately
    FileWrite($file, " " & "Checksum" & @CRLF) ;in this if-statement

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

    elseif $ArrString == "0007" then
    FileWrite($file, hex($wert[1],4)) ;because this is the checksum
    FileWrite($file, " " & hex(int($modulo),2) & ";") ;it has to be calculated differently
    FileWrite($file, " " & "Checksum" & ";") ;...so it is done seperately
    FileWrite($file, " " & "Checksum" & @CRLF) ;in this if-statement
    elseif $ArrString <> "0000" then ;for all the other parameters
    FileWrite($file, $arr[$Ziffer1] & $arr[$Ziffer2] & $arr[$Ziffer3] & $arr[$Ziffer4]) ;this if statement creates the lines
    FileWrite($file, " " & hex($wert[6],2) & ";") ;in the .eep file
    FileWrite($file, " " & $wert[5] & ";")
    FileWrite($file, " " & $wert[4] & @CRLF)
    EndIf
    Next
    MsgBox(0,"","You can find the EEP file where the used Excel file is located!") ;Messagebox to show the routine is done and to show where the .eep file is saved
    EndIf
    $oExcelDoc.Application.Run("myFolder")
    GUIRegisterMsg($WM_PAINT, "WM_PAINT")

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

    EndFunc

    [/autoit]

    Könnt ihr mir bitte helfen?

    Vlt kann mir einer von euch sagen, warum mein FileSaveDialog den ausgewählten Speicherort nicht übernimmt?

    Oder wie ich den oben gezeigten Code ein Bisschen beschleunigen kann?

    Das wäre super toll!

  • Excel 2007 als .xlsm speichern

    • vakaba
    • 6. Februar 2014 um 13:25

    Water, vielen Dank für deine Hilfe!

    Ich bin mir sicher, dass ich mit etwas mehr Zeit noch auf eine funktionierende AutoIt Lösung gekommen wäre...

    Heute Morgen wurde mir aber leider gesagt, dass ich mein Tool morgen vorstellen muss. Nach ein Bisschen hin und her probieren, hab ich mich wegen Zeitdruck dann doch dafür entschieden, mein Excel File über n Excel Makro abzuspeichern und einfach in meinem AutoIt Script dieses Makro aufzurufen.

    Nochmal Danke für deine Hilfe! Ich bin mir sicher, dass hier jetzt genug Infos stehen, sodass ich dieses Thema jetzt auf gelöst setzte. Ich hoffe in meiner Freizeit bald mal die Zeit zu finden, deinen Lösungsvorschlag noch zu verwirklichen. :)

  • Excel 2007 als .xlsm speichern

    • vakaba
    • 5. Februar 2014 um 17:03

    Okay super danke! Ich bekomme schon "normalere" Fehlermeldungen...

    Jetzt muss ich noch versuchen mit dem Excel Rewrite ein Excel so zu öffnen, dass es in meiner GUI eingebettet wird und dass ich es dann als .xlsm file abspeichern kann. Aber bald ist Feierabend, dann werde ich mich wohl eher morgen da dran machen.

    Vielen Dank schon mal für deine Hilfe water! Ich hoffe von hier aus selbst so weit zu kommen, dass ich dieses Thema dann auf "gelöst" stellen kann :)

  • Excel 2007 als .xlsm speichern

    • vakaba
    • 5. Februar 2014 um 16:28

    Ok ich hab das jetzt wirklich alles gemacht. Ich habe mir auch das Beispielscript durchgelesen. Aber ich bekomme sobald ich "#include <Excel REwrite.au3> eine Fehlermeldung die ich wirklich überhaupt nicht verstehe. Und zwar sieht die so aus: (ich schreibe einfach wirklich alles auf, was auf der Fehler-MsgBox steht...)

    -----------------------

    Line 29 (File "C:\Users\BaierV\AppData\Notepad++Portable\autoit_3380\AutoIt3\Include\ExcelConstants.au3"):

    Global Const $xlCenter = -4108

    Global Const^ERROR

    Error: Can not redeclare a constant.

    -------------------------

    Ich verstehe überhaupt nicht was das Problem ist, da ich "excelConstants.au3" in meinem Programm gar nie aufrufe. Und ich verwende auch keine $xlCenter" Variable.

  • Excel 2007 als .xlsm speichern

    • vakaba
    • 5. Februar 2014 um 15:31

    Hallo Water,

    danke für deinen Tipp mit deiner UDF. Ich hab die jetzt runtergeladen und in meinem "include"-Ordner ausgepackt. Ist das das richtige Vorgehen?

    Jetzt kommt bei diesem Befehl zwar keine Fehlermeldung mehr, aber gespeichert wird die .xlsm Datei leider trotzdem nicht... :(

    _ExcelBookSaveAs($oExcelDoc.Application, $pfad & $EEPInput & ".xlsm" , "xlsm")

    Ich weiß leider gar nicht sicher ob ich das mit der UDF richtig mache... Kann mir jemand sagen, wo ich nachlesen kann, wie man mit einer UDF genau umgehen muss, um ihre Befehle verwenden zu können? Das wäre spitze! :)

  • Excel 2007 als .xlsm speichern

    • vakaba
    • 5. Februar 2014 um 12:54

    Hallo,

    ich habe in meiner GUI ein Excel Sheet, das ich nach der Bearbeitung gerne dort abspeichert würde, wo das ursprüngliche Sheet geöffnet wurde ($pfad) aber mit einem in einer Inputbox angegebenen Namen (&EEPInput).

    Jetzt ist es so, dass ich es mit diesem Befehl super als .xls abspeichern kann:

    _ExcelBookSaveAs($oExcelDoc.Application, $pfad & $EEPInput & ".xls" , "xls")

    ABER ich hätte eben gerne ein .xlsm File. Nur aus ".xls" jeweils ".xlsm" zu machen geht nicht. Jetzt habe ich schon in Foren was über UDFs gelesen, aber ich weiß nicht sicher wie das mit den UDFs funktioniert.

    Hat jemand ein Tipp für mich wie ich mein Excel Sheet als .xlsm abspeichern kann? Oder könnte mir jemand das mit den UDFs erklären?

  • eingebettetes Excel aktivieren

    • vakaba
    • 4. Februar 2014 um 15:35

    Hallo gmmg!

    Danke für deinen Tipp!

    Ich verstehe nicht warum ich es mit PainTains Tipps nicht hinbekommen habe.

    Dass der Benutzer jetzt sieht, wie die Maus vom Button zur eingebetteten Tabelle rutscht finde ich nicht so schön, aber alles in allem ist mein Problem gelöst :)

    Danke Danke Danke

  • eingebettetes Excel aktivieren

    • vakaba
    • 4. Februar 2014 um 15:12

    Bitte helft mir! Hat denn nun wirklich niemand eine Idee, was mein Fehler sein könnte?

    Ich freue mich über jegliche Rückmeldung! Ob es nun eine Idee ist oder Kritik oder sonstiges...

  • eingebettetes Excel aktivieren

    • vakaba
    • 3. Februar 2014 um 08:39

    Hey PainTain,

    ich hab beide Vorschläge von dir versucht, aber leider bekomme ich das einfach nicht hin... :(

    Ich füge hier mal mein Script an. Die Stelle, an der ich versuche das eingebettete Excel zu aktivieren, habe ich auskommentiert. Dort sieht man all meine Versuche es zu aktivieren. Und zwar ist das in der Funktion "Func CreateButtonClicked() ".

    Vielleicht hast du/habt ihr alle ja eine Idee was mein Fehler ist.

    Spoiler anzeigen

    #include <GUIConstants.au3>
    #include <Array.au3>
    #include <Excel.au3>
    #include <String.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Crypt.au3>

    Opt("GUIOnEventMode", 1)

    $oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ;Initialize my error handler

    Func CloseClicked() ;Function to close the Programm
    $oExcelDoc.Close (0)
    Local $iDelete = FileDelete(@TEMPdir & "\Test.csv")
    Exit
    EndFunc

    $FileName = FileOpenDialog("Pick a file", @ScriptDir, "Excel Files (*.xls;*.xlsx;*.xlsm)") ;Excel file to be worked on is chosen

    if not FileExists($FileName) then ;test if chosen Excel file exists
    Msgbox (0,"Excel File Test","Can't run this test, because it requires an Excel file in "& $FileName)
    Exit
    endif
    ;define variables
    ;---------------------------------
    Local $oExcelDoc ;Variable for Created Excel Object
    Local $arr[16] ;Array to define Hex vlaues
    $arr[0] = 0
    $arr[1] = 1
    $arr[2] = 2
    $arr[3] = 3
    $arr[4] = 4
    $arr[5] = 5
    $arr[6] = 6
    $arr[7] = 7
    $arr[8] = 8
    $arr[9] = 9
    $arr[10] = "A"
    $arr[11] = "B"
    $arr[12] = "C"
    $arr[13] = "D"
    $arr[14] = "E"
    $arr[15] = "F"
    Local $array ;variable to save .csv file as an array

    ;---------------------------------
    $oExcelDoc = ObjGet($FileName) ;Get an Excel Object from the chosen file
    if IsObj($oExcelDoc) then ;check if creation of object worked out
    GUICreate ( "Embedded ActiveX Test", 1640, 950) ;create the GUI
    GUISetOnEvent ($GUI_EVENT_CLOSE, "CloseClicked") ;define event to close the object

    $GUI_ActiveX = GUICtrlCreateObj ( $oExcelDoc, 0, 200 , 1640 , 800) ;embed the chosen Excel file into GUI

    For $Bar In $oExcelDoc.CommandBars ;set commandbars invisible
    If $Bar.Enabled = True Then $Bar.Enabled = False
    If $Bar.Visible = True Then $Bar.Visible = False
    Next ;set different commandbars and menu bars invisible
    $oExcelDoc.Application.DisplayFormulaBar = False
    $oExcelDoc.Application.CommandBars("Shadow Settings").Visible = False
    $oExcelDoc.Application.CommandBars("Control Toolbox").Visible = False
    $oExcelDoc.Application.CommandBars("Worksheet Menu Bar").Enabled = False
    $oExcelDoc.Application.DisplayScrollBars = True
    $oExcelDoc.Application.DisplayStatusBar = False
    $oExcelDoc.Application.DisplayFormulaBar = False
    ;---------------------------------------------------------------------------------
    ;create buttons, labels and input fields and put them into GUI
    $SoftwareButton = GUICtrlCreateButton("show all info", 20, 150)
    GUICtrlSetOnEvent($SoftwareButton, "SoftwareButtonClicked")

    $CoolingButton = GUICtrlCreateButton("show cooling parameter", 90, 150)
    GUICtrlSetOnEvent($CoolingButton, "CoolingButtonClicked")

    $EEPCreateButton = GUICtrlCreateButton("Create EEP File", 720, 150)
    GUICtrlSetOnEvent($EEPCreateButton, "CreateButtonClicked")

    $EEPNameLabel = GUICtrlCreateLabel("name of .eep file:",220, 157)

    $EEPNameInput = GUICtrlCreateInput("", 320, 155, 70, 20)

    $EEPEndingLabel = GUICtrlCreateLabel(".eep", 400, 157)

    $UserNameLabel = GUICtrlCreateLabel("User: ", 440, 157)

    $UserNameInput = GUICtrlCreateInput("", 480, 155, 70, 20)

    $CommentLabel = GUICtrlCreateLabel("Remark: ", 560, 157)

    $CommentInput = GUICtrlCreateInput("", 600, 155, 100, 20)
    ;-------------------------------------------------------------------------------
    CoolingButtonClicked() ;show only cooling technology relevant parameters as default status
    GUISetState (@SW_SHOW) ;Show GUI

    ; GUI Message loop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE ;or $msg = $GUI_FileExit
    ExitLoop
    EndSelect
    Wend

    GUIDelete ()

    ;close workbook, otherwise Excel will stay in memory after the script exits
    $oExcelDoc.Close (0) ; Close the Excel workbook - Save prompt will not open

    EndIf

    Func SoftwareButtonClicked() ;SoftwareButton is clicked = all parameters are shown in GUI

    Local $sPasswd = InputBox("Security Check", "Enter your password.", "", "*") ; Asks the user to enter a password. Don't forget to validate it!
    $hash = _Crypt_HashData($sPasswd, $CALG_MD5)
    if $hash == "0x91273E8CFB21C51C025CE8DE2A9231EE" then
    $oExcelDoc.Application.Run("Software") ;all the regulations of the "cooling technology" setting are canceled and every single cell can be seen and changed
    else
    Msgbox(0, "Warning", "The password you entered is not right!")
    endif

    EndFunc

    Func CoolingButtonClicked() ;CoolingButton is clicked = only cooling technology parameters are shown in GUI
    $oExcelDoc.Application.Run("BlattschutzAufheben") ;sheet protection is canceled, so that the "cooling technology" regulations can be applied
    $oExcelDoc.Application.Run("SelectAll") ;every single classification is activated so that the "cooling technology" regulations can "see" all points from which the relevant ones are chosen
    $oExcelDoc.Application.Run("CoolingTechnology") ;relevant cooling parameters are chosen and a sheet protection is set so that only the relevant cells can be changed
    EndFunc

    Func CreateButtonClicked() ;Function which defines what happens when the "Create EEP file" button is clicked
    ; GUICtrlSetState($oExcelDoc.Application, 0)
    ;ControlFocus($oExcelDoc, "", "")
    ;WinActivate($oExcelDoc)
    #cs
    $Control = ControlGetFocus("$oExcelDoc")

    If Not $Control Then
    MsgBox(16, "Error", "Control not focused")
    Else
    MsgBox(0, "", $Control)
    EndIf
    #ce
    $UserInput = GUICtrlRead($UserNameInput) ;input field for user name is read
    $EEPInput = GUICtrlRead($EEPNameInput) ;input field for EEP-file name is read
    $Comment = GUICtrlRead($CommentInput) ;input field for comment is read

    If $EEPInput == "" Then ;routine that ensures that the EEP file gets a name
    MsgBox(0,"","you have to give your EEP file a name!")
    Else
    $oExcelDoc.Application.Run("SaveAsCsv") ;if the EEP file got a name, a csv file is created

    Local $file = FileOpen($EEPInput & ".eep", 1) ;a textfile with the chosen EEP-file name is created with the ending .eep
    _FileReadToArray(@TEMPdir & "\Test.csv", $array) ;created csv file is saved in an array

    ;insert header in .eep file
    FileWrite($file, "################################################################################" & @CRLF)
    FileWrite($file, "#Created with Excel to EEP programme" & @CRLF)
    FileWrite($file, "#User: " & $UserInput & " Date: " & @MDAY & "." & @MON & "." & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & @CRLF)
    FileWrite($file, "#Project File: " & $EEPInput & ".eep" & @CRLF)
    FileWrite($file, "#Remarks: " & $Comment & @CRLF)
    FileWrite($file, "################################################################################" & @CRLF)
    FileWrite($file, @CRLF)

    For $zeile = 1 To $array[0] ;array is being worked with

    $wert = StringSplit($array[$zeile], ";") ;values in between semicolons are being separated and written into $wert

    $number = number($wert[1]) ;values of first collumn of array are converted into a number

    Local $Zahl1 = 4096 ;this number is being calculated,
    Local $Zahl2 = 256 ;so that a hex number with 4 characters develops
    Local $Zahl3 = 16 ;this is done with the array which was defined at the top of the programm
    $Ziffer1 = Int($number/$Zahl1) ;(from 0 to F)
    $Rest1 = Mod($number,$Zahl1)
    $Ziffer2 = Int($Rest1/$Zahl2)
    $Rest2 = Mod($Rest1,$Zahl2)
    $Ziffer3 = Int($Rest2/$Zahl3)
    $Ziffer4 = Mod($Rest2,$Zahl3)

    Local $ArrString = $arr[$Ziffer1] & $arr[$Ziffer2] & $arr[$Ziffer3] & $arr[$Ziffer4] ;4 digit hex number (calculated above) is put together

    if $wert[2] == "CalculateCRC" then ;first line has to be read separately,
    FileWrite($file, hex($wert[1],4)) ;because its adress is "0"
    FileWrite($file, " " & hex($wert[6],2) & ";") ;and many other non relevant parameters have this adress too
    FileWrite($file, " " & $wert[5] & ";") ;...so the line for the first parameter is done seperately
    FileWrite($file, " " & $wert[4] & @CRLF) ;in this if-statement

    elseif $ArrString <> "0000" then ;for all the other parameters
    FileWrite($file, $arr[$Ziffer1] & $arr[$Ziffer2] & $arr[$Ziffer3] & $arr[$Ziffer4]) ;this if statement creates the lines
    FileWrite($file, " " & hex($wert[6],2) & ";") ;in the .eep file
    FileWrite($file, " " & $wert[5] & ";")
    FileWrite($file, " " & $wert[4] & @CRLF)
    EndIf
    Next
    MsgBox(0,"","EEP file is saved at the location your xlsm file is at!") ;Messagebox to show the routine is done and to show where the .eep file is saved
    EndIf
    EndFunc

    Func MyErrFunc() ;This is the custom error handler
    $HexNumber=hex($oMyError.number,8)
    Msgbox(0,"AutoItCOM Test","We intercepted a COM Error !" & @CRLF & @CRLF & _
    "err.description is: " & @TAB & $oMyError.description & @CRLF & _
    "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _
    "err.number is: " & @TAB & $HexNumber & @CRLF & _
    "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _
    "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _
    "err.source is: " & @TAB & $oMyError.source & @CRLF & _
    "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _
    "err.helpcontext is: " & @TAB & $oMyError.helpcontext _
    ,1)
    SetError(1) ;to check for after this function returns
    Endfunc

    ;DirRemove(@TempDir & '\Test.csv')
    ;FileDelete(@TEMPdir & "\Test.csv")
    Exit ;Ende des Scripts


    Hier kommen noch die zwei Fehlermeldungen die kommen, egal auf welche Weise ich versuche das Excel in meiner GUI zu aktivieren. Also die zwei Fehlermeldungen kommen einfach immer, wenn ich vor klicken des "Create Button" nicht nochmal extra auf mein eingebettetes Excel klicke.

    --> Oh nein! Wie lade ich hier denn Bilder hoch? Ich hab es versucht indem ich ihren Pfad angebe, aber ich glaub mein PC (bei der Arbeit) lass Autoit nicht drauf zugreifen...


    Edit:

    Fehlermeldung 1: "We intercepted a COM Errror! err.descriptionist: Das Makro 'SaveAsCsv' kann nicht ausgeführt werden. Das Makro ist möglicherweise in dieser ARbeitsmappe nicht verfügbar, oder alle Makros wurden deaktiviert. err.number is: 80020009..."

    Da steht zwar noch mehr Info aber ich glaube das ist nicht so wichtig. Jedenfalls bin ich mir sicher, dass Autoit nicht auf das Makro zugreifen kann, weil die Excel Tabelle in dem Moment nicht aktiviert ist und Autoit daher nicht weiß woher das Makro kommt oder so... Denn wenn ich die Excel-Tabelle vor anklicken des Buttons anklicke, dann funktioniert es alles...

    Fehlermeldung 2 sagt mir dann ab wo mein Programm ein Problem hat: " Line 162(File... hier steht der Pfad zu meinem File...)

    For $zeile = 1 To $array[0]

    For $zeile = 1 To $array^ERROR

    Error: Subscript used with non-Array variable."

  • eingebettetes Excel aktivieren

    • vakaba
    • 31. Januar 2014 um 13:27

    Hallo,

    ich hab in einer GUI die folgenden 3 Dinge:

    - eingebettete Excel Tabelle

    - Inputbox in die ich einen Namen zum speichern eingeben kann

    - Button, dessen klicken bewirkt, dass die Excel Tabelle als .csv abgespeichert wird (über ein Excel Makro das dan ausgeführt wird)


    Jetzt hab ich das Problem, dass dieser Buttonklick nur funktioniert, wenn die Exceltabelle das letzte ist, was ich angeklickt habe. Das heißt, gebe ich einen Namen in die Inputbox ein, muss ich erst nochmal auf die Tabelle klicken, bevor ich auf meinen Button klicken darf. Ansonsten kommt ein Error.

    Kennt ihr eine Möglichkeit, wie ich die Tabelle vlt durch den Buttonklick erst "aktivieren" kann, bevor mein Programm versucht ne .csv Datei daraus zu machen?

  • csv Trennzeichen abfragen

    • vakaba
    • 28. Januar 2014 um 11:16

    Hey BugFix!

    Super danke für deine Hilfe! Den Befehl mit dem Substring kannte ich noch nicht und bin auch bei meiner Suche im Netz nicht darauf gestoßen. (Muss noch ein Bisschen lernen die richtigen Suchbegriffe einzugeben)...

    Das Problem mit den Kommas oder Semikolons im Text gibt es nicht, da in der Tabelle nur Namen und Werte stehen, die nicht durch Kommas sonder wenn dann Unterstriche oder Punkte getrennt sind.

    Werde gleich mal den Status des Themas ändern

  • csv Trennzeichen abfragen

    • vakaba
    • 28. Januar 2014 um 10:37

    Hallo zusammen,

    ich schreibe gerade ein Script, dass eine .csv Datei öffnet und als array einliest. Als Trennzeichen nehme ich ";"(Semikolon). Da mein Programm aber (falls ich es gut hinbekomme) auch in anderen Ländern verwendet wird, kann es ja sein, dass die .csv Dateien ein","(Komma) als Trennzeichen haben werden. 8|

    Jetzt möchte ich einfach vor den Befehl, die .csv Datei in einen Array zu schreiben eine Abfrage machen, ob Semikolons oder Kommas drin sind. Ich dachte das sei total leicht mit if.. ABER... mit welchem Befehl kann ich zum Beispiel das 5. Zeichen in der 2. Zeile der .csv Datei anschauen (welches in dem Fall entweder ein Komma oder ein Semikolon ist).

    Es wäre echt super wenn ihr mir ein Paar Tipps geben würdet! :)

    Danke!!

  • Excel File als .csv speichern

    • vakaba
    • 22. Januar 2014 um 13:48

    Hallo zusammen,

    ich möchte gerne ein bereits vorhandenes Excel File mit Makros öffnen, bearbeiten und dann als .csv File speichern.

    Ich brauche es als .csv File, da dann das auslesen als Array schneller geht als wiewenn ich das Excel File als Array auslese.

    Jedenfalls bekomme ich es nicht hin, dass mein geöffnetes Excel File als .csv File gespeichert wir. Hab schon im Internet gesucht, finde aber nichts, was bei mir funktioniert.


    Bis jetzt sieht mein Quellcode so aus: (weiß leider nicht wie ich den in so ne schöne Box bekomme. Hab schon mal ne Hilfe dazu gesehen, aber die finde ich auch nicht mehr... ;( )

    ;-----------------------------------------

    #include <Excel.au3>
    #include <String.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>

    $FileName = FileOpenDialog("Pick a file", @ScriptDir, "Excel Files (*.xls;*.xlsx;*.xlsm)");Excel file to be worked on is chosen

    if not FileExists($FileName) then;test if chosen Excel file exists
    Msgbox (0,"Excel File Test","Can't run this test, because it requires an Excel file in "& $FileName)
    Exit
    endif
    $oExcelDoc = ObjGet($FileName) ;Get an Excel Object from the chosen file

    _ExcelBookSaveAs($oExcelDoc, $FileName, "csvWin")

    ;-------------------------------------------------

    Der Befehl "_ExcelBookSaveAs($oExcelDoc, $FileName, "csvWin")" scheint nicht zu funktionieren. Aber ich weiß leider nicht wie ich das sonst schreiben soll.

    Falls ihr mir helfen könnt, dieses Problem zu lösen, könnt ihr mir dann bitte auch sagen, wo mein .csv File dann abgespeichert wird? Das weiß ich leider auch nicht so genau.


    Gruß Vanessa

  • Im Hauptprogramm andere AU3 Dateien aufrufen

    • vakaba
    • 21. Januar 2014 um 16:37

    Hallo Zusammen!

    Ich erstelle gerade ein Script welches folgendes kann/macht:

    Die Oberfläche ist ein eingebettetes Excel-File, welches ich über einen OpenFileDialog auswähle. Dieses Excel-File kann ich bearbeiten und über einen Button möchte ich dann, dass aus meiner .xlsm Datei eine .eep Datei kreiert wird.

    Die Funktionalitäten habe ich alle schon inbekommen, nur habe ich sie alle in unterschiedlichen AU3 Dateien stehen. (Das habe ich so gemacht, da ich immer wenn eine Funktion funktioniert hat, lieber die nächste in ner neuen Datei erstellt habe, damit ich die erste Funktion nicht wieder kaputt mache.)

    Nun stehe ich mit allen Funktionen in unterschiedlichen Datein da. Um sie zusammenzufügen könnte ich sie natürlich einfach ineinander rein kopieren. Da sie nun aber schon einigermaßen übersichtlich seperat dastehen, wäre es mir lieber, sie in den einzelnen AU3 Dateien stehen zu lassen und lieber in einer main.au3 alle nötigen AU3 Dateien nacheinander aufzurufen.

    Ich weiß leider nicht wie das geht und suche nun Tipps, ob und wie das funktioniert.

    UEZ hat mir bereits den Tipp gegeben einfach mal die Hilfe zum #include Befehl durchzulesen. Das werde ich jetzt machen und nachher oder morgen posten, ob und wie mir das hilft.

    Danke UEZ!

    Gruß Vanessa


    Edit: Der #include Befehl ist genau das was ich gesucht habe

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™