Excel Tabellen auslesen und Berechnen

  • Heyhey :)

    Ich bin auf der Suche nach einer Möglichkeit in einer Excel tabelle 2 Werte auszulesen und die Differenz zwischen ihnen auszurechnen. Das Problem dabei ist nicht nur die Technik des auslesens, sondern auch die Tatsache, dass die Positionen der Werte sich immer verändern. Geplant ist es so:

    Wert 1
    Wert 2
    Wert 3
    Wert 4
    Wert 5

    -> Wert 3 ist die Differenz zwischen 1 und 2, Wert 4 ist die Differenz aus 2 und 3, und Wert 5 wäre dann die Differenz aus 3 und 4.

    Ist sowas möglich? Das ganze brauche ich um DBC files die nicht linear verlaufen zu bestimmen, für die die es interessiert :)

    LG
    was2

  • Hallo.

    Habe zwar noch NIE mit EXCEL bei AutoIt gearbeitet, aber lauf Hilfe sollte es so funktionieren:

    Spoiler anzeigen
    [autoit]


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

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

    ; Exceldatei erstellen
    Local $oExcel = _ExcelBookNew()

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

    ; Überschriften in Zeile 1:
    _ExcelWriteCell($oExcel, "W1", 1, 1)
    _ExcelWriteCell($oExcel, "W2", 1, 2)
    _ExcelWriteCell($oExcel, "W3", 1, 3)
    _ExcelWriteCell($oExcel, "W4", 1, 4)
    _ExcelWriteCell($oExcel, "W5", 1, 5)

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

    ; Deklaration des 0 basierenden Arrays
    ; diese können auch eingelesen werden !!!
    Local $aArray[5] = ["20", "10", "40", "30", "50"]

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

    ; Array horizontal in die Exceldatei erfügen, Zeile 2
    _ExcelWriteArray($oExcel, 2, 1, $aArray)

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

    ; Berechnungen ; diese kann auch durch Excel Formeln ersetzt werden
    $1 = $aArray[0] - $aArray[1] ; 20 - 10 = 10
    $2 = $aArray[1] - $aArray[2] ; 10 - 40 = -30
    $3 = $aArray[2] - $aArray[3] ; 40 - 30 = 10

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

    ; Text über den Berechneten Feldern einfügen, Zeile 4
    _ExcelWriteCell($oExcel, "W1 - W2", 4, 2)
    _ExcelWriteCell($oExcel, "W2 - W3", 4, 3)
    _ExcelWriteCell($oExcel, "W3 - W4", 4, 4)

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

    ; berechnete Werte in die Exceldatei schreiben, Zeile 5
    _ExcelWriteCell($oExcel, $1, 5, 2)
    _ExcelWriteCell($oExcel, $2, 5, 3)
    _ExcelWriteCell($oExcel, $3, 5, 4)

    [/autoit]

    Die Exceltabelle ist wie folgt aufgebaut:
    1. Zeile: Überschriften der 2. Zeile
    2. Zeile: Werte mit den gerechnet werden kann
    3. Zeile: Leerzeile
    4. Zeile: Überschriften der 5. Zeile
    5. Zeile: berechnete Werte

    Wie geschrieben, kannst du auch Formel setzen. Wie das geht, steht genau in der Hilfe.
    Weiß aber nicht ob Du das möchtest und deshalb habe ich o. g. Lsg. verwendet.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    3 Mal editiert, zuletzt von Alina (19. Januar 2014 um 05:49)

  • Das auslesen kannst du dir in der Hilfe ansehen:

    [autoit]


    _ExcelBookOpen
    _ExcelReadCell
    _ExcelReadArray
    _ExcelReadSheetToArray

    [/autoit]

    Zusätzlich solltest du dir das Array Tutorial von Bugfix ansehen: http://www.bug-fix.info/array_tut.htm

    Jenachdem welche Excel Version du verwendest kann es eventuell auch sinnvoll sein hier im Forum nach einer neueren Version der Excel UDF zu suchen. Ich denke "Water" hat hier irgendwann mal damit angefangen die UDF für Excel 2007/2010/2013 fit zu machen. Ich persönlich habe nie wirklich mit den Excel Funktionen von Autoit gearbeitet.
    EDIT: hier ist der Link zum Thread --> https://autoit.de/index.php?page=Thread&amp;threadID=32997

    Das Problem dabei ist nicht nur die Technik des auslesens, sondern auch die Tatsache, dass die Positionen der Werte sich immer verändern.

    Nunja wir sind keine Hellseher und auch Autoit kann keine magischen Dinge tun. Wenn man mit Daten arbeitet muss auch ein System bekannt sein wie diese gespeichert werden und aufgefunden werden können. Da dein Hirn in der Lage ist ein System zu erkennen und die richtigen Daten in der Tabelle zu finden solltest du auch in der Lage sein diese Denkprozesse in geeigneten Autoit Code umzusetzen. Das mag nicht immer einfach sein, aber es ist definitiv unmöglich wenn man keine Beispieldateien hat. Somit bist entweder du gefragt das System zu erkennen und umzusetzen oder du stellst mindestens zwei Beispieldateien zur Verfügung die das Problem der Datenerkennung und Zuordnung veranschaulichen.

    4 Mal editiert, zuletzt von misterspeed (19. Januar 2014 um 09:56)

  • Die aktuellste Beta-Version für die neu geschriebene Excel UDF findest Du hier.
    Wenn alles gut läuft, dann ersetzt meine UDF die aktuelle Excel UDF in der nächsten AutoIt Beta.

  • Tut mir Leid das so hart sagen zu müssen, aber ich habe vorher nie mit Excel gearbeitet... Was sind UDFs? :X

    Alina
    Die Variante probier ich gleich mal aus. Gibt es da noch ne Möglichkeit nicht das Ergebnis der Rechnung, sondern den Betrag zu nehmen? Also nicht bei 10-20 = -10 sondern bei |10-20=10|, sodass keine negativen werte rauskommen? :) Das wär dann exakt was ich brauche

    PS: Hier ist das Aussehen der Rechnungen

    [Blockierte Grafik: http://puu.sh/6qiPz.png]

    Der nächste Wert errechnet sich immer ungefähr aus den Werten der beiden Werten davor.
    Vor dem Komma steht die Indexzahl, die hierbei Irrelevant ist, nach dem Komma ist die Rechnung etwa so:

    75,166229248-72,7271118164=77,5881958008

    Das soll so weiter geführt werden, damit man eine beliebige Anzahl damit berechnen kann.

    Für die die es interessiert: Es ist eine DBC Datei die Werte pro Index angibt, die möglichst Akkurat berechnet werden sollen :)

    Einmal editiert, zuletzt von was2 (19. Januar 2014 um 12:37)

  • BITTE BIS UNTEN LESEN !!!

    So, erst einmal das Minuszeichen weg machen, wenn die Zahl negativ sein sollte.

    Siehe hier:

    Spoiler anzeigen
    [autoit]


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

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

    ; Exceldatei erstellen
    Local $oExcel = _ExcelBookNew()

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

    ; Überschriften in Zeile 1:
    _ExcelWriteCell($oExcel, "W1", 1, 1)
    _ExcelWriteCell($oExcel, "W2", 1, 2)
    _ExcelWriteCell($oExcel, "W3", 1, 3)
    _ExcelWriteCell($oExcel, "W4", 1, 4)
    _ExcelWriteCell($oExcel, "W5", 1, 5)

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

    ; Deklaration des 0 basierenden Arrays
    ; diese können auch eingelesen werden !!!
    Local $aArray[5] = ["10", "20", "40", "30", "50"]

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

    ; Array horizontal in die Exceldatei erfügen, Zeile 2
    _ExcelWriteArray($oExcel, 2, 1, $aArray)

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

    ; Berechnungen ; diese kann auch durch Excel Formeln ersetzt werden
    $1 = $aArray[0] - $aArray[1] ; 10 - 20 = -10
    $2 = $aArray[1] - $aArray[2] ; 20 - 40 = -20
    $3 = $aArray[2] - $aArray[3] ; 40 - 30 = 10

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

    ; Berechnungen ; diese kann auch durch Excel Formeln ersetzt werden incl. absolute Wertangabe
    $4 = Abs($aArray[0] - $aArray[1]) ; 10 - 20 = -10 <<<------------------------------------
    $5 = Abs($aArray[1] - $aArray[2]) ; 20 - 40 = -20 <<<------------------------------------
    $6 = Abs($aArray[2] - $aArray[3]) ; 40 - 30 = 10 <<<------------------------------------

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

    ; Text über den Berechneten Feldern einfügen, Zeile 4
    _ExcelWriteCell($oExcel, "W1 - W2", 4, 2)
    _ExcelWriteCell($oExcel, "W2 - W3", 4, 3)
    _ExcelWriteCell($oExcel, "W3 - W4", 4, 4)

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

    ; berechnete Werte in die Exceldatei schreiben, Zeile 5
    _ExcelWriteCell($oExcel, $1, 5, 2)
    _ExcelWriteCell($oExcel, $2, 5, 3)
    _ExcelWriteCell($oExcel, $3, 5, 4)

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

    ; Text über den Berechneten Feldern einfügen, Zeile 7
    _ExcelWriteCell($oExcel, "ohne Minus", 7, 2); <<<------------------------------------
    _ExcelWriteCell($oExcel, "ohne Minus", 7, 3); <<<------------------------------------
    _ExcelWriteCell($oExcel, "ohne Minus", 7, 4); <<<------------------------------------

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

    ; in Excel schreiben ohne vorzeichen !!!
    _ExcelWriteCell($oExcel, $4, 8, 2) ; <<<------------------------------------
    _ExcelWriteCell($oExcel, $5, 8, 3); <<<------------------------------------
    _ExcelWriteCell($oExcel, $6, 8, 4); <<<------------------------------------

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

    <<<------------------------------------: bedeutet anschauen, da ich das zugefüht habe

    DANKE liebe Hilfedatei. Ich habe gerade gelernt, wozu "Abs" ist.
    Die Hilfe kann man auch mal so durch gehen um zu sehen was alles möglich ist und wenn man es
    dann braucht, findet man eine Sache schneller. Ich habe es so gemacht. Bin aber auch blond !!!

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    6 Mal editiert, zuletzt von Alina (20. Januar 2014 um 02:17)

  • Tut mir Leid das so hart sagen zu müssen, aber ich habe vorher nie mit Excel gearbeitet... Was sind UDFs? :X

    UDF steht für User Defined Functions Library. Also eine Biblithek von Funktionen zu einem bestimmten Thema. Werden mit #include eingebunden und dann wie normale Funktionen verwendet.