ExcelBookOpen

  • Hey,

    Ich Arbeite gerade für mein Vater an ein Programm welches Wetter, Strom,Gas etc. Daten in einer Exceltabelle verwaltet. Er hat bereits eine riesige Tabelle die nun 4 Jahre alt ist und wo alle Erträge drinne stehen. Anfangs klappte es auch alles wunderbar, doch seid einigen Tagen kommt immer wieder eine Fehlermeldung:

    Namenskonflikt
    Name darf integriertem Namen nicht gleichen.
    Alter Name: _FilterDatabase
    Neuer Name:

    Wenn ich da etwas eingehe klappt nichts, wenn nicht schließt es sich sofort wieder. In AutoIt sagt er mir das hier:
    D:\Program Files\AutoIt3\Include\Excel2.au3 (191) : ==> The requested action with this object has failed.:
    If $sPassword = "" And $sWritePassword = "" Then .WorkBooks.Open($sFilePath, Default, $fReadOnly)
    If $sPassword = "" And $sWritePassword = "" Then .WorkBooks.Open($sFilePath, Default, $fReadOnly)^ ERROR

    Der Fehler passiert in meinem Code in dieser Funktion:

    Spoiler anzeigen
    [autoit]

    Func _Excel_Check()
    _Read()
    Local $Check = True
    If ProcessExists('EXCEL.EXE') Then
    $Msg = MsgBox(68,'Achtung!','Es gibt bereits eine geöffnetes Excel-Dokument' & @CRLF & 'Soll es geschlossen werden?')
    If $Msg = 6 Then ProcessClose('EXCEL.EXE')
    EndIf
    While $Check = True
    $name = _ExcelSheetNameGet($oExcel)
    If @error = 1 Then
    $oExcel = _ExcelBookOpen($AltPfad,0) ; Das hier ist der "error" Befehl, aber $AltPfad wird als String erkannt und ist der richtige zum Dateipfad.
    If @error = 1 Then
    _write_log($Log , "Konnte kein Excel Objekt erstellen!", $Main)
    $Check = False
    _Error()
    ElseIf @error = 2 Then
    _write_log($Log , "Datei existiert nicht", $Main)
    $Check = False
    _Error()
    EndIf
    _ExcelSheetActivate($oExcel,$Tabellenname)
    If @error = 1 Then
    _write_log($Log , "festgelegtes Objekt existiert nicht", $Main)
    $Check = False
    _Error()
    ElseIf @error = 2 Then
    _write_log($Log , "festgelegte Zahl des Tabellenblattes existiert nicht", $Main)
    $Check = False
    _Error()
    ElseIf @error = 3 Then
    _write_log($Log , "festgelegter Name des Tabellenblattes existiert nicht", $Main)
    $Check = False
    _Error()
    EndIf
    ElseIf @error = 0 Then
    $Check = False
    EndIf
    WEnd
    ;~ $aArray = _Excel_Search('Datum' ,'2012/12/27' ,1)
    $CheckDatum = (_DateDiff('d',"2010/01/01",GUICtrlRead($LDatum)))-1
    $Cell = 4 + $CheckDatum
    EndFunc

    [/autoit]

    Die datei ist eine *.xlsx und bis vor kurzem hatte es noch geklapp. Mit genau der selben Datei. In der Excel include sieht es so aus:

    Spoiler anzeigen
    [autoit]

    Func _ExcelBookOpen($sFilePath, $fVisible = 1, $fReadOnly = False, $sPassword = "", $sWritePassword = "")
    Local $oExcel = ObjCreate("Excel.Application")
    If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
    If Not FileExists($sFilePath) Then Return SetError(2, 0, 0)
    If $fVisible > 1 Then $fVisible = 1
    If $fVisible < 0 Then $fVisible = 0
    If $fReadOnly > 1 Then $fReadOnly = 1
    If $fReadOnly < 0 Then $fReadOnly = 0
    With $oExcel
    .Visible = $fVisible
    If $sPassword <> "" And $sWritePassword <> "" Then .WorkBooks.Open($sFilePath, Default, $fReadOnly, Default, $sPassword, $sWritePassword)
    If $sPassword = "" And $sWritePassword <> "" Then .WorkBooks.Open($sFilePath, Default, $fReadOnly, Default, Default, $sWritePassword)
    If $sPassword <> "" And $sWritePassword = "" Then .WorkBooks.Open($sFilePath, Default, $fReadOnly, Default, $sPassword, Default)
    If $sPassword = "" And $sWritePassword = "" Then .WorkBooks.Open($sFilePath, Default, $fReadOnly)

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

    ; Select the first *visible* worksheet.
    For $i = 1 To .ActiveWorkbook.Sheets.Count
    If .ActiveWorkbook.Sheets($i).Visible = $xlSheetVisible Then
    .ActiveWorkbook.Sheets($i).Select()
    ExitLoop
    EndIf
    Next
    EndWith
    Return $oExcel
    EndFunc ;==>_ExcelBookOpen

    [/autoit]

    Ich nutze soweit ich glaube die AutoIt beta version hier aus dem Forum. Also 3.3.9.1 ist es glaube ich. Ich habe keine Ahnung wie ich das Problem lösen kann und suche schon seid stunden nach einer Lösung doch ohne erfolg :(

    #edit: es ist deshalb Excel2 weil ich bereits versucht habe etwas in der include zu verändern. Einfach zu testen ob ich es so rausbekomme und ich wollte die Excel.au3 nicht überspeichern

    MfG Nico

    MfG - Mit freundlichen Grüssen

    die Welt liegt uns zu Füssen, den wir steh'n drauf

    wir geh'n drauf für ein Leben voller Schall und Rauch

    bevor wir fall'n, fall'n wir lieber auf.

  • Hi,
    das ist kein Fehler von AutoIt, sondern von Excel.

    Versuche mal, sämtliche gesetzten Filter in Excel auszuschalten, speichern und dann erst mit AutoIt zu bearbeiten

  • Wie mache ich das den? Was Excel angeht bin ich sogesagt ein voll Brot. Ich habe die 2010er Version. Und Wenn ich irgendwelche Filter ausschalten muss die die Tabellen werde verändern kann ich das leider auch nicht machen. Ich kann es vorab bei meiner Testfile testen aber wenn das etwas an der Darstellung etc. ändert muss ich es anders lösen :/ hätte da zwar schon ideen (das in andere datei schreiben etc.) aber das ist unsauber! Also ich hoffe du kannst mir das für dumme erklären und ich melde mich dan wie es geklappt hat! :)

    MfG Nico

    MfG - Mit freundlichen Grüssen

    die Welt liegt uns zu Füssen, den wir steh'n drauf

    wir geh'n drauf für ein Leben voller Schall und Rauch

    bevor wir fall'n, fall'n wir lieber auf.

  • Hi,
    in Excel erkennt man die zu filternden Spalten an Zellen, welche ein nach unten zeigendes Dreieck auf der rechten Seite haben.
    Die Tabelle verändert man mit Filtern nicht, aber das, was man "sieht". Die Filter filtern die Ansicht der Daten...

    Jetzt gibt es für dich 2 Möglichkeiten:
    - Entweder dein Vater stellt die Filter so ein, dass man "alles" (also die gesamte Tabelle) "sieht" und speichert dann, oder
    - er vergisst das AutoIt-Script, denn AutoIt kann nichts dafür, dass der Excel-Befehl für das Auflösen der Filter nicht richtig funktioniert!

    Die Filter müssen nicht gelöscht werden, sondern nur auf "alles anzeigen" gestellt sein!

  • Mh du wirst es mir vll nicht glauben aber die Filter waren alle auf alles anzeigen. Und es klappt nicht. Dan habe ich in meiner Test tabelle auch einfach mal alle Filter gelöscht, die waren nur in dem sheet wo auch alles eingetragen werden muss. Sonst nirgendwo, aber dennoch klappt es nicht :S ich würde dir halt mal gerne die Tabelle schicken oder so, aber ich glaube da ist mein Vater dan nicht so der Fan von und ich darf es bestimmt nicht. Und eine vergleichbar ähnliche gibts a) nicht und b) meine alte die ich ja noch hatte klappt ja auch.

    MfG Nico

    MfG - Mit freundlichen Grüssen

    die Welt liegt uns zu Füssen, den wir steh'n drauf

    wir geh'n drauf für ein Leben voller Schall und Rauch

    bevor wir fall'n, fall'n wir lieber auf.

  • Wie gibst Du in Deinem Skript $AltPfad an? Nur test.xlsx oder den vollen Pfad z.B. C:\temp\test.xlsx

  • Vollen Pfad, der auch richtig als string erkannt wird, und auch stimmt. mehrfach ausgeben lassen etc.

    C:\...\test.xlsx <- halt mit allem dazwischen

    MfG Nico

    MfG - Mit freundlichen Grüssen

    die Welt liegt uns zu Füssen, den wir steh'n drauf

    wir geh'n drauf für ein Leben voller Schall und Rauch

    bevor wir fall'n, fall'n wir lieber auf.

  • Kannst Du das Workbook mal als XLS abspeichern? Die Excel UDF hat es nicht so mit den neuen Dateiformaten.

  • Habe ich bereits getan, da gehen dan ein paar wichtige formatierungen weg, die auf gar keinen fall weg sein dürfen. Aber dannach ging es :S aber es geht doch sonst bei anderen xlsx datein. Warum den nun ausgerechnet nicht mehr bei dieser? :/

    MfG Nico

    MfG - Mit freundlichen Grüssen

    die Welt liegt uns zu Füssen, den wir steh'n drauf

    wir geh'n drauf für ein Leben voller Schall und Rauch

    bevor wir fall'n, fall'n wir lieber auf.

  • Mit den Infos die wir bis jetzt haben, können wir Dir leider keine genauere Auskunft geben.

  • Sagt mir was ihr noch wissen braucht :/ die datei ist nicht schreibgeschützt, man kan sie so normal bearbeiten. Es sind nicht die Filter die das Problem verursachen. Beim zum xls machen geht es wieder allerdings fehlen dan ganze zeilen. Ich wüsste jz nicht was ich da noch mal nachschauen sollte :S

    Wenn du das willst kann ich dir die Datei ja mal schicken. Solange sie halt einfach nicht jeder hat es ja okee

    MfG Nico

    MfG - Mit freundlichen Grüssen

    die Welt liegt uns zu Füssen, den wir steh'n drauf

    wir geh'n drauf für ein Leben voller Schall und Rauch

    bevor wir fall'n, fall'n wir lieber auf.

  • Du kannst mir die Excel gerne als PN senden. Dann spiele ich mal damit rum ;)

  • Hier noch eine Frage:
    Tritt das Problem (sprich die Fehlermeldung) auch auf, wenn Du die Datei mit Excel direkt (also ohne AutoIt) öffnest?

  • Vielleicht findest sich hier die Lösung des Problems. Probier mal das Kochbuch aus indem Du einen neuen Namen angibst und den Bereich danach löscht (natürlich nur, wenn Du ihn nicht mehr brauchst).
    http://www.viscom.co.at/dls/tipps-und-…nskonflikt.html

  • Nein, ich kan die excel datei ohne weiterem bearbeiten, öffnen löschen alles. Ich kan sie einfach so aufrufen und alles super.

    MfG Nico

    MfG - Mit freundlichen Grüssen

    die Welt liegt uns zu Füssen, den wir steh'n drauf

    wir geh'n drauf für ein Leben voller Schall und Rauch

    bevor wir fall'n, fall'n wir lieber auf.

  • Hab's hinbekommen.
    Direkt mit Excel 2010 lässt sich die Datei problemlos öffnen.
    Wenn ich das mit AutoIt mache, erhalte ich die Fehlermeldung. Gelöst habe ich das nun wie folgt:

    • Mit AutoIt das Workbook geöffnet
    • Bei der Fehlermeldung den Namen au "xyz" geändert.
    • Mit Strg+F3 den Namensmanager aufgerufen. Da gibt es dann seltsamerweise keinen Namen "xyz"
    • Mit "Neu..." den Namen "xyz" angelegt
    • Die Datei gespeichert
    • Die Datei neu aufgemacht und mit Strg+F3 den Namen wieder gelöscht
    • Die Datei gespeichert
    • Nun funktioniert es auch mit AutoIt

    Sag mir bitte, ob es bei Dir auch funktioniert, dann lösche ich alle Spuren von meinem Rechner.

  • :thumbup: :thumbup: :love: danke danke danke danke danke! Du hast mir damit echt sehr viel weiter geholfen! Ich wäre da alleine nie drauf gekommen und hätte es sonst nie lösen können! Vieeelen dank :)

    MfG Nico

    MfG - Mit freundlichen Grüssen

    die Welt liegt uns zu Füssen, den wir steh'n drauf

    wir geh'n drauf für ein Leben voller Schall und Rauch

    bevor wir fall'n, fall'n wir lieber auf.

  • Schön, dass ich helfen konnte :)
    Die Dateien habe ich inzwischen auch alle gelöscht.