Announcement

Collapse
No announcement yet.

Delphi + Excel + Formeln übergeben

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Delphi + Excel + Formeln übergeben

    Bis jetzt habe ich folgenden Quelltext entworfen
    <PRE>
    flcid:=GetUserDefaultLCID;
    ExcelApp.Connect;
    h := ExtractFilePath(ParamStr (0));
    if h[length(h)] <> '\'
    then h := h + '\';
    FileName := h + 'Beurteilung Seminare.xls';

    ExcelWorkb.ConnectTo(ExcelApp.Workbooks.Open(filen ame,
    emptyParam,
    emptyParam,
    emptyParam,
    emptyParam,
    emptyParam,
    emptyParam,
    emptyParam,
    emptyParam,
    emptyParam,
    emptyParam,
    emptyParam,
    emptyParam, flcid));
    ExcelWorks.ConnectTo(ExcelWorkb.Sheets.Item[1] as ExcelWorkSheet);
    </PRE>
    Dann füge ich aus der Datenbank einige Fragen und Antworten hinzu,
    dann möchte ich eine Auswertung machen das heißt 100/sum(Feldvon:Feldbis) * FeldAnzahl.
    das habe ich bis jetzt wie folgend gemacht:
    <PRE>
    hilf := '=(100/(summe('+soll+':'+bis+'))*'+ist+')';
    ExcelWorks.Range[formel, formel].formula := hilf;
    </PRE>
    Wobei soll, bis, ist und formel die jeweils gesuchten Felder sind.
    So weit funktioniert mein Programm auch. Im Excel wird genau meine Formel übergeben, das problem ist nur das er es nicht berechnet, ich muss zuerst auf das Feld doppel klicken bis er es berechnet. Was ich natürlich nicht will. Ich denke das er erst mit dem doppelklick weis welche Felder er nehmen soll.
    Über das Makro habe ich noch eine andere Möglichkeit ermittelt:
    <PRE>
    ExcelWorks.Range[formel,formel].value := '=100/(SUM(R[-1]C[+'+soll+']:R[-1]C[-'+bis+'])*RC[-1]';
    </PRE>
    aber mit diesem Quelltext bekomme ich immer einen Ole-Fehler. Wenn ich nun die Formel von Hand in Excel schreibe, kann Excel damit auch nichts anfangen.
    Wieso?
    Wie schaffe ich es das er meine Formel erkennt und automatisch berechnet??

    Eure
    Nausi

  • #2
    Hallo Nausi,<p>
    Du schreibst in Excel ein Formel rein, die nicht funktioniert? Dann empfindest Du das Verhalten in Delphi nach und stellst fest, dass es auch nicht funktioniert!<br>
    Was hattest Du denn erwartet?? Wie sieht denn eine funktionierende Formel in Excel aus?<p>
    Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      Ich habe probiert die Formel so zu übergeben wie das passiert wenn ich ein Makro erstelle (hab mir da den Quelltext angeschaut)
      Wenn ich in Excel die Formel eingebe die ich so übergebe:
      <PRE>
      hilf := '=(100/(summe('+soll+':'+bis+'))*'+ist+')';
      ExcelWorks.Range[formel, formel].formula := hilf;
      </PRE>
      funktioniert meine Berechnung, auch wenn ich die Formel übergeben habe und dann doppelt auf die Formel klicke berechnet die Formel das Ergebnis. Nur ohne klicken geht halt nix, ich sehe die Formel ganz normal geschrieben als wäre es ein Text zum Lesen.
      Woran liegt das

      Comment


      • #4
        Hallo Nausi,<p>
        Du schreibst leider zu wenig, dass ich Deinen Code einfach nachbauen könnte, darum haben ich mal meinen Code abgewandelt. Bei mir lädt Excel eine Test.xls, schreibt in Zelle A2 und A3 jeweils eine Zahl und in Zelle A1 die Formel für die Addition und dann steht da auch automatisch das Ergebnis drin...<p>

        <pre class="sourcecode"><code>
        <b>unit</b> Unit1;

        <b>interface</b>

        <b>uses</b>
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, Excel97, StdCtrls;

        <b>type</b>
        TForm1 = <b>class</b>(TForm)
        Button1: TButton;
        <b>procedure</b> Button1Click(Sender: TObject);
        <b>private</b>
        <font color="#003399"><i>{ Private-Deklarationen }</i></font>
        <b>public</b>
        <font color="#003399"><i>{ Public-Deklarationen }</i></font>
        <b>end</b>;

        <b>var</b>
        Form1: TForm1;

        <b>implementation</b>

        <font color="#003399"><i>{$R *.dfm}</i></font>

        <b>procedure</b> TForm1.Button1Click(Sender: TObject);
        <b>VAR</b> MyExcel : Excel97._Application;
        xlWorkbook : Excel97._Workbook;
        xlWorkSheet : Excel97._Worksheet;
        xlRange : Excel97.Range;
        FLCID, i, j : Integer;
        <b>begin</b>
        FLCID := GetUserDefaultLCID;
        <b>TRY</b>
        MyExcel := CoExcelApplication.Create;
        <b>EXCEPT</b>
        <b>TRY</b>
        MyExcel := CoExcelApplication.Create;
        <b>EXCEPT</b>
        <b>ON</b> E:Exception <b>DO</b>
        <b>BEGIN</b>
        MessageDlg(<font color="#9933CC">'Microsoft Excel 97 oder h&#246her konnte nicht initialisiert werden. Der Vorgang kann nicht '</font>+
        <font color="#9933CC">'vorgesetzt werden.'</font>#10<font color="#9933CC">'&#187'</font>+E.Message+<font color="#9933CC">'&#171'</font>, mtError, [mbOK],0);
        Exit;
        <b>END</b>;
        <b>END</b>;
        <b>END</b>;

        MyExcel.Application.Visible[FLCID] := True;

        xlWorkbook := MyExcel.Workbooks.Open(<font color="#9933CC">'c:\Test.xls'</font>, EmptyParam, EmptyParam, EmptyParam,
        EmptyParam, EmptyParam, EmptyParam, EmptyParam,
        EmptyParam, EmptyParam, EmptyParam, EmptyParam,
        FALSE, FLCID);

        xlWorkSheet := xlWorkbook.Sheets.Item[1] <b>as</b> Excel97._Worksheet;

        xlWorkSheet.Range[<font color="#9933CC">'A2'</font>, <font color="#9933CC">'A2'</font>].formula := <font color="#9933CC">'=3'</font>;
        xlWorkSheet.Range[<font color="#9933CC">'A3'</font>, <font color="#9933CC">'A3'</font>].formula := <font color="#9933CC">'=2'</font>;
        xlWorkSheet.Range[<font color="#9933CC">'A1'</font>, <font color="#9933CC">'A1'</font>].formula := <font color="#9933CC">'=A2+A3'</font>;

        <b>end</b>;

        <b>end</b>.

        </code></pre><p>
        Jetzt brauchst Du nur noch den Unterschied zu Deinem relevanten Code versuchen auszumachen.<p>
        Schöne Grüße und viel Erfolg, Mario Noac
        Schöne Grüße, Mario

        Comment


        • #5
          Erst mal danke für das Beispiel ich habe inzwischen meinen Fehler auch gefunden: anstall summe in der Formel zu übergeben muss ich sum übergeben!! Excel wandelt das dann selber in SUMME um und meine Berechnung funktioniert auch ohne doppelklick!

          Ich musste die Formel dynamisch angeben, da je nach Anzahl der Antworten mehr oder weniger Zellen addiert werden sollen.

          Danke Euch!

          Eure Naus

          Comment

          Working...
          X