[Gelöst] Formel an Excel übergeben

18. November 2008 11:17

Hallo zusammen,

ich übergebe Preisinformationen an Excel. Dazu nutze ich den Excel Buffer. Nun möchte ich aber, damit mit der Mappe gearbeitet werden kann, Formeln an Excel übergeben. Das heißt, eine Zelle ist die Differenz zwischen zwei anderen und in Prozent soll diese Differenz auch noch ausgegeben werden. Wie muss die Syntax für die Formel aussehen, die ich an AddColumn übergebe, damit das Programm versteht, dass ich eine Formel übergebe.

Gruß, Birgit Terhorst
Zuletzt geändert von Birgit Terhorst am 19. November 2008 11:12, insgesamt 1-mal geändert.

Re: Formel an Excel übergeben

18. November 2008 12:33

Hallo,

genauso wie unter Excel auch.

Also z.B. = SUMME(A1:A4)

Re: Formel an Excel übergeben

18. November 2008 12:49

Hallo,
genau das ist ja mein Problem. Ich muss den Namen der Spalte variabel gestalten, da ich ja mehrere Zeilen ausgebe und innerhalb jeder Zeile mehrere Spalten mit einer Formel. Wie kann ich z.B. A1 mitgeben und beim nächsten Durchlaufen der Funktion A2, bzw. B2?
Gruß,
Birgit

Re: Formel an Excel übergeben

18. November 2008 13:22

Grundsätzlich so würde ich sagen:


Variable Line - Integer
// Line bei jedem Durchlauf hochzählen
Code:
Line += 1;
'=SUMME(A' + FORMAT(Line) + ':C:' + FORMAT(Line) + ')' ergibt dann auch
= Summe(A1:C1)


Für unterschiedliche Spalten wäre ein Ansatz z.B. ein Array mit den Spalten-Buchstaben zu füllen und dann je nach Bedarf ansprechen
SpaltenArray

Code:
'=SUMME(' + Spaltenarray(1) + FORMAT(Line) + ':'+ Spaltenarray(3) + FORMAT(Line) + ')'

ist wieder (Wenn das Array mit z.B. A,B,C,D.... gefüllt ist)
Code:
= Summe(A1:C1)
Zuletzt geändert von Natalie am 1. Februar 2009 17:34, insgesamt 1-mal geändert.
Grund: Code-Tags eingefügt

Re: Formel an Excel übergeben

19. November 2008 09:09

Hallo Birgit,

wenn Du eine separate Funktion hast, in der der ExcelBuffer mit den Zeilendaten gefüllt wird, dann kann dies relativ einfach gemacht werden.

Hier ein Beispiel:

Code:
    LOCAL PROCEDURE MakeExcelDataBody@4();
    VAR
      prevCell@1106800002 : Code[20];
      actCell@1106800001 : Code[20];
      txtFormula@1106800000 : Text[150];
      decBasis@1106800003 : Decimal;
      intBasis@1106800004 : Integer;
    BEGIN
      ExcelBuf.NewRow;
      ExcelBuf.AddColumn("Marketing Area".Code,FALSE,'',FALSE,FALSE,FALSE,'@');
      ExcelBuf.AddColumn("Marketing Area".Description,FALSE,'',FALSE,FALSE,FALSE,'@');
      ExcelBuf.AddColumn(prevPeriodValue,FALSE,'',FALSE,FALSE,FALSE,'#.##0,000');
      prevCell := ExcelBuf.xlColID + ExcelBuf.xlRowID;

      ExcelBuf.AddColumn(actperiodValue,FALSE,'',FALSE,FALSE,FALSE,'#.##0,000');
      actCell := ExcelBuf.xlColID + ExcelBuf.xlRowID;

      txtFormula := '=(' + actCell + '/' + prevCell +')-1';
      IF prevperiodValue <> 0 THEN
        ExcelBuf.AddColumn(txtFormula,TRUE,'',FALSE,FALSE,FALSE,'0,00 %')
      ELSE
        ExcelBuf.AddColumn('',FALSE,'',FALSE,FALSE,FALSE,'');

      ExcelBuf.AddColumn(prevYearHL,FALSE,'',FALSE,FALSE,FALSE,'#.##0,000');
      prevCell := ExcelBuf.xlColID + ExcelBuf.xlRowID;

      ExcelBuf.AddColumn(actYearHL,FALSE,'',FALSE,FALSE,FALSE,'#.##0,000');
      actCell := ExcelBuf.xlColID + ExcelBuf.xlRowID;

      txtFormula := '=(' + actCell + '/' + prevCell +')-1';
      IF prevperiodValue <> 0 THEN
        ExcelBuf.AddColumn(txtFormula,TRUE,'',FALSE,FALSE,FALSE,'0,00 %')
      ELSE
        ExcelBuf.AddColumn('',FALSE,'',FALSE,FALSE,FALSE,'');


Von der Vorgehensweise funktioniert dies so:
- wenn mit "AddColumn" eine neue Zelle für Excel gefüllt wird, die dann in der selben Zeile wieder für eine Formel verwendet werden soll,
dann kannst Du dir nach "AddColumn" die verwendete Excel-Zelle (z.B. "B17") in einer Variablen merken. Die verwendete Excel-Zelle steht in den Feldern
xlColID und xlRowID des Excelbuffers.
- die gleiche Vorgehensweise machst Du mit der zweiten, dritten, ... Zelle, die Du für Formeln verwenden willst
- danach kannst Du eine Formel generieren. Die Schreibweise ist dann wie in Excel. In meinem Beispiel habe ich die prozentuale Veränderung zwischen 2 Werten errechnet und habe bei dem Füllen der Formelzelle ein benutzerdefiniertes Zahlenformat ('0,00 %') angegeben.

Vielleicht hift Dir dieses Beispiel.
Bei Fragen fragen.

Gruß
Jörg

Re: Formel an Excel übergeben

19. November 2008 10:46

Vielen Dank für Eure Antworten.
Meine Berechnungen funktionieren nun.

Gruß,
Birgit

Re: [Gelöst] Formel an Excel übergeben

2. April 2009 13:22

Ich habe leider noch keine Ahnung vom Excelbuffer :-)

Ich passe Report 7132 dahin gehend an, dass in die Excel-Datei eine Formel geschrieben werden soll.
Leider wird die Formel als Text interpretiert - was mache ich falsch? Wenigstens ist sie inhaltlich schon mal richtig ...

Hier der Inhalt des Excelbuffers der betroffenen Zelle:
Code:
Zeilennr.           10
XlZeileID           8
Spaltennr.          10
XlSpalteID          H
Zellenwert als Text   
Bemerkung   
Formel              =F10*G10
Fett                Nein
Kursiv              Nein
Unterstrichen       Nein
Nummernformat       @   
Formel 2   
Formel 3   
Formel 4


Was ist daran falsch?

Edit: Habs nun selbst heraus gefunden: Nummernformat muss leer sein.