_excelbookopen

  • Hallo Leute. Ich hab natürlich die Suche bemüht, aber diesmal hab ich ausnahmsweise keine Lösung zu meinem Problem gefunden.

    Folgendes Problem: Ich muss ein paar Werte aus einer XML-Datei herausbekommen. Nachdem ich ewig gesucht habe nach ner Möglichkeit die Daten aus ner zu katalogisieren aber ich bin einfach nicht weiter gekommen. Also hab ich die Dateiendung geändert in "*.txt" und lese die mit excel ein, übertrage das sheet in ein Array, suche mir dort die richtigen Werte raus und schreibe die in ein weiteres array. Das Problem ist, dass ich immer folgende Fehlermeldung bekomme, na was heißt immer, immer nicht aber manchmal, das ist es ja was das Problem so kompliziert macht:

    C:\Programme\AutoIt3\Include\Excel.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

    Kann mir jemand einen Tipp geben? Vielen Dank!

    Hab mal versucht den Code anzuhängen, hoffe das klappt so.

    Spoiler anzeigen
    [autoit]

    Func createlist()
    Local $search, $searchfolder, $filelist, $find, $name, $left,$right, $eRAN, $EARFCN, $ALL[1][3], $temp, $i, $progress, $app, $j

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

    $searchfolder = FileSelectFolder("Find folder data is in","E:\Arbeitsordner")
    If StringRight($searchfolder,1) <> "\" Then $searchfolder = $searchfolder & "\"
    $filelist = _FileListToArray($searchfolder,"*.txt",1)
    $temp = $filelist[0] + 1
    ReDim $ALL[$temp][3]
    $ALL[0][0] = "NE-Name"
    $ALL[0][1] = "eRAN"
    $ALL[0][2] = "EARFCN"
    ProgressOn("import","data will be imported","",-1,-1,18)
    ProgressSet(0)
    For $i = 1 To $filelist[0]
    $importfile = $searchfolder & $filelist[$i]
    FileWrite("E:\Arbeitsordner\log.txt",$filelist[$i] & @CRLF)

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

    $data = import($importfile)

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

    $find = _ArraySearch($data,"<cfgfile:subsession neid=",0,-1,1,1,1)

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

    $left = StringInStr($data[$find][1],"neid=") + 5

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

    $right = StringInStr($data[$find][1],"netype=") - 3

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

    $name = StringLeft($data[$find][1],$right)
    $name = StringRight($name,($right-$left))
    $find = _ArraySearch($data,"<RAN:eNodeB",0,-1,1,1,1)
    $eRAN = StringRight($data[$find][1],4)
    $eRAN = StringLeft($eRAN,3)

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

    $find = _ArraySearch($data,"<DLEARFCN>",0,-1,1,1,1)
    $temp = $data[$find][1]
    $EARFCN = StringRight($temp,15)
    $EARFCN = StringLeft($EARFCN,4)

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

    $ALL[$i][0] = $name
    $ALL[$i][1] = "eRAN" & $eRAN
    $ALL[$i][2] = $EARFCN
    $progress = (($i/$filelist[0])*100)
    ProgressSet($progress,$name)
    Next
    ProgressOff()

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

    $app = _ExcelBookNew(0)
    For $i = 0 To $filelist[0]
    For $j = 0 To 2
    _ExcelWriteCell($app,$ALL[$i][$j],($i+1),($j+1))
    Next
    Next
    $temp = @YEAR & @MON & @MDAY & "_config_export.xls"
    _ExcelBookSaveAs($app,$searchfolder & $temp)
    _ExcelBookClose($app)

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

    Return($doit)


    EndFunc
    ;---------------------------------------------------
    Func import($importfile)
    Local $app, $i,$length

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

    ReDim $data[1][1]
    $app = _ExcelBookOpen($importfile,0,1,"","")
    $data = _ExcelReadSheetToArray($app)
    _ExcelBookClose($app)

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

    Return($data)

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

    EndFunc
    ;--------

    [/autoit]
  • Warum so umständlich? Mit FileRead die xml einlesen und mit _StringBetween den Wert auslesen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Weiters findest Du im englischen Forum eine UDF um mit XML-Dateien zu arbeiten.

  • Das hatte schon jemand gepostet irgendwo, dass das nach _stringbetween schreit. Hättest du nen Beispiel für micht?

  • _stringbetween ist eigentlich selbsterklärend. Für ein konkretes Beispiel bräuchte es die entsprechende XML.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Ja das verstehe ich ja. Aber nichts desto trotz sind wir ja davon abgekommen, warum da die Fehlermeldung kommt. Hat jemand eine Idee?

  • Sorry, aber der in der Fehlermeldung angegebene Code sowie die Zeilennummer kommen in dem von Dir geposteten Beispiel nicht vor.
    So wird die Fehlerssuche natürlich etwas schwierig :(

  • Hi Water.
    Na die Fehlermeldung bezieht sich doch auf die excel.au3.
    Oder nicht? Hab gerade nochmal geschaut, da kommt die Zeile 191 vor. Die Fehlermeldung bezieht sich auf das öffnen der exceltabelle. Ich verstehe nicht, warum er damit Ärger hat. Jemand von euch?

  • Mal ein paar Fragen um das Problem einzugrenzen:

    • Welches Betriebssystem verwendest Du?
    • Welches Office verwendest Du?
    • Ist Excel auch installiert auf der betreffenden Maschine?
    • Welche Architektur verwendest Du für Betriebssystem und Office (64 Bit, 32 Bit)?
    • Für welche Architektur kompilierst Du Dein AutoIt Skript?
  • Also, Windows XP SP3, klar, 32Bit, Office2003 und excel ist installiert ja. Und ich hatte das script bisher gar nicht kompiliert, weil es ja noch nicht funktioniert hat. Ich mach immer F5 während ich das script erstelle und dann wird das ja ausgeführt.
    Meinst du das es dort Probleme geben könnte?

  • Lass mal mit Strg+F5 die Syntaxprüfung drüberlaufen.

  • Kann es schliucht und ergreifend sein, das der Filename Leerzeichen oder irgendwas anderes enthält über das die UDF stolpert? Wenn du das log.txt anschaust, sind alle Einträge übereinstimmend?
    Dein Beispiel ist ja leider nicht funktionstüchtig ....

    Gruß

  • Hallo Leute, freu mich echt über die Antworten die ich bekomme. Nein aus dem Dateinamen kann das nicht kommen, die sind mit Underscore statt Leerzeichen.

    Die Syntaxüberprüfung mit Strg+F5 kannte ich noch nicht und prompt hab ich 1 error und 9 warnings. Die arbeite ich mal ab.

    Hm, hab ich jetzt und jetzt bin ich gespannt, ich lass das Tool mal laufen.

  • Nix, immer noch derselbe behämmerte Fehler. Fuck it.
    Noch jemand eine Idee?

  • Moin,

    ich weiß das der Thread hier schon mächtig am verwesen ist, aber da Google auf die hier Angegebene Fehlermeldung nur sehr wenige ergebnisse ausspuckt und ich mitlerweile eine Lösung für das Problem gefunden habe, versuch ich mich mal an Leichenschändung :D

    Das problem tritt bei mir nämlich nur dann auf, wenn ich KEINEN expliziten Pfad zur Excel Datei angebe. Im Beispiel befindet sich das excel File im selben Ordner wie das script:

    [autoit]


    #include <Excel.au3>
    $sFilePath1 = "Test.xls"
    $oExcel = _ExcelBookOpen($sFilePath1)

    [/autoit]


    dieses Script wird aslo mit der oben erwähnten Fehlermeldung belohnt

    [autoit]


    #include <Excel.au3>
    $sFilePath1 = @ScriptDir & "\Test.xls"
    $oExcel = _ExcelBookOpen($sFilePath1)

    [/autoit]


    während dieses Script laufen sollte
    Vielleicht hilft es ja eines Tages irgend jemand

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

  • Hallo WiDDoW,

    na da sag ich doch mal danke! Ich hab das anders gelöst, hab nen Tool geschrieben das dierekt die komplette XML ausliest. Aber jetzt im Nachhinein: "klingt logisch"... :)

    Danke nochmal!