Excel Buffer - EnterCell Funktion erweitern

25. März 2010 08:17

Hallo zusammen.

Ich habe einen Report in Nav. geschrieben und möchte diesen nach Excel exportieren.
Mein Problem ist, der Export soll in mehrere Excel Sheet's stattfinden.

z.B.:
1. Tabellenblatt soll alle Länder und Kunden enthalten
2. Tabellenblatt bekommt die Umsätze nach Länder
3. Tabellenblatt soll ein Diagramm haben, welches sich auf Tabellenblatt 2 "Umsätze je Länder" bezieht

Einzeln funktioniert der Export super, aber alle Daten in eine Excelmappe zubekommen scheitert.

Wie kann ich Nav. sagen, schreibe mir die Werte auf Blatt 1 und die Werte auf Blatt 2?
... beziehungsweise ...
Ist es möglich die Funktion "EnterCell" in Tabelle 370 "Excel Buffer" um den Wert Tabellenblatt XY zu erweitern?

MfG

Re: Excel Buffer - EnterCell Funktion erweitern

30. März 2010 14:08

Hallo,

wo gibt es im NAV-Standard in Tabelle 370 die Funktion "EnterCell" ?

Tschüß

Re: Excel Buffer - EnterCell Funktion erweitern

30. März 2010 14:35

Stimmt, EnterCell ist keine Funktion der Tabelle 370, sondern für gewöhnlich in Reports zu finden, z.B. 7132

Re: Excel Buffer - EnterCell Funktion erweitern

30. März 2010 16:47

Ich denke, wenn es so ist, daß du immer zwischen den einzelnen Tabellenblättern hin- und herspringen mußt, dann ist schon etwas an deiner Struktur nicht ganz richtig. Ich würde ein Tabellenblatt so aufbereiten, wie ich es haben möchte und mich dann um das nächste kümmern.
Danach solltest du dich dann mit den Begriffen Workbook, Worksheet, usw. auseinandersetzen. Unter msdn steht eigentlich alles, was man dazu wissen muß.

Re: Excel Buffer - EnterCell Funktion erweitern

6. April 2010 17:18

Du brauchst die EnterCell-Funktion in dem Bericht nicht erweitern.

Zuerst legst Du in Tabelle 370 eine neue Funktion AddSheet (ohne Parameter) an:
Code:
XlWorkSheet := XlWorkBook.Worksheets.Add();


Dann musst Du in Deinem Report nur wie folgt vorgehen:
Fülle Deinen ExcelBuffer mit den Werten für das erst Tabellenblatt
Dann legst Du zuerst die Arbeitsmappe und das erste Tabellenblatt an und schiebst die Daten nach Excel - was Du wahrscheinlich jetzt schon getan hast:
Code:
ExcelBuf.CreateBook;
ExcelBuf.CreateSheet(
  'Irgendein Blatt',
  PADSTR(STRSUBSTNO('Irgendein Blatt'),30),
  COMPANYNAME,USERID);


Nun musst Du den ExcelBuffer mit DELETEALL löschen und für die Daten des 2. Blattes neu füllen. Anschließend rufst Du Deine neue Funktion auf und schiebst die Daten erneut nach Excel:
Code:
ExcelBuf.AddSheet;
ExcelBuf.CreateSheet(
  'ein 2. Blatt',
  PADSTR(STRSUBSTNO('ein 2. Blatt'),30),
  COMPANYNAME,USERID);

Letzteres kannst Du beliebig oft wiederholen. Du musst nur immer an das Löschen des ExcelBuffers denken.

Re: Excel Buffer - EnterCell Funktion erweitern

24. Oktober 2012 09:38

Soweit funktioniert es ja bei mir.
Allerdings fängt er beim zweiten Tabellenblatt nicht in A1 an, sondern in der nächsten Zelle, wo er im ersten Blatt aufgehört hat.
Also im ersten Tabellenblatt schreibt er seinen letzten Eintrag in Zelle F8 und im nächsten Tabellenblatt fängt er dann in der Zelle G8
an zu schreiben, in der nächsten Zeile dann in A9. Aber die Zellen A1 bis F8 bleiben leer.
Ich habe im 2. DataItem des Reports im OnPreDataItem()-Trigger folgenden Code:
Code:
IF Excelausgabe THEN BEGIN
  Excelbuffer.DELETEALL;
  Excelbuffer.AddSheet();
  //Überschrift einfügen
  Excelbuffer.AddColumn('M-Nr.',FALSE,'',TRUE,FALSE,FALSE,'');
  ...
END;

dann im OnAfterGetRecord()-Trigger
Code:
IF Excelausgabe THEN BEGIN
  Excelbuffer.NewRow();
  //Daten einfügen
  Excelbuffer.AddColumn("Nr.",FALSE,'',FALSE,FALSE,FALSE,'');
  ...
END;


und im OnPostDataItem()-Trigger
Code:
IF Excelausgabe THEN BEGIN
  Excelbuffer.CreateSheet('Maschinenbestand','Maschinenbestand zum Stichtag (R50009)',COMPANYNAME,USERID);
  Excelbuffer.FormatSheet(TRUE,1);
END;


zu guter letzt im OnPostReport-Trigger
Code:
IF Excelausgabe THEN BEGIN
  Excelbuffer.GiveUserControl();
END;


Hab jetzt schon gesucht und probiert, bin aber nicht draufgekommen wieso...

Re: Excel Buffer - EnterCell Funktion erweitern

24. Oktober 2012 09:48

Schau mal, ob es in der Version von NAV die Funktion "ClearNewRow" im Excelbuffer gibt. Damit beginnst du von Zeile/Spalte 1.

Re: Excel Buffer - EnterCell Funktion erweitern

24. Oktober 2012 10:08

Super, danke, das war's!