Excel export/import 2 oder 3 platte

30. November 2007 10:31

Hallo,

Ich möchte eine excel automatizm machen!
Ich mache es mit tutorial (navision24.de).
Es geht mit 1 table. Aber ich möchte es mit 2 oder 3 table machen!
1 table data ist in erste platte, 2 table data in zweite platte; UZW

Wie kann ich es machen?

1. Dezember 2007 00:31

Hallo!

Damit mehrere Sheets (Platten) erzeugt werden können, muss die Programmierung im Objekt Table 370 erweitert werden.

Die Funktion "CreateBook" erzeugt standardmäßig nur ein Sheet und mit der Funktion "CreateSheet" kann dieses dann befüllt werden.

Wenn du jetzt die Funktion "CreateSheet" um die entsprechende Code-Sequenz aus "CreateBook" [XlWrkSht := XlWrkBk.Worksheets.Add;] erweiterst, wird bei jedem Aufruf von "CreateSheet" ein neues Sheet erzeugt.

Allerdings solltest du dem Ganzen ein Kennzeichen mitgeben (damit du für NAV-Standards nichts kaputt machst), so dass du nur bei Bedarf den Code in "CreateBook" deaktivierst und in "CreateSheet" aktivierst (siehe Funktion "SetUseInfoSheed").

3. Dezember 2007 10:12

Hallo,

Ich muss modify die Objekt Table 370, und nicht meine report!?
Und ich modify die tigger CreateBook?
Es hat diese funktion:

IF NOT CREATE(XlApp,TRUE) THEN
ERROR(Text000);
XlApp.Visible(FALSE);
XlWrkBk := XlApp.Workbooks.Add;
XlWrkSht := XlWrkBk.Worksheets.Add;

Was muss ich machen mit es?

Danke für die hilfe!

3. Dezember 2007 11:45

[Beitrag aus dem Forum Dynamics NAV 4.xx nach Software-Integration verschoben.]

Gruß, Kai
MSDynamics.de-Team

3. Dezember 2007 21:01

Dann fangen wir mal an:
In T370 legst du eine neue Funktion (z.B.: EnableMultipleSheets) und eine globale Variable (z.B.: MultipleSheets) vom Typ Boolean an. In dieser Funktion trägst du den folgenden Code ein:
Code:
MultipleSheets := TRUE;

Die Funktion CreateBook erweiterst du folgendermaßen:
Code:
XlWrkBk := XlApp.Workbooks.Add;
// grofs BEGIN
IF NOT MultipleSheets THEN
// grofs END
  XlWrkSht := XlWrkBk.Worksheets.Add;


Entsprechend in der Funktion CreateSheet folgende Erweiterung:

Code:
RecNo := 0;

// grofs BEGIN
IF MultipleSheets THEN
  XlWrkSht := XlWrkBk.Worksheets.Add;
// grofs END
XlWrkSht.Name := SheetName;
IF ReportHeader <> '' THEN


Den Report solltest du am besten auf drei Durchläufe begrenzen (z.B. mit DataItem Integer) und folgendermaßen vorgehen:

OnPreDataItem
Code:
ExcelBuffer.EnableMultipleSheets;
ExcelBuffer.CreateBook;


OnAfterGetRecord
Code:
ExcelBuffer.CreateSheet(SheetName, SheetName, COMPANYNAME, USERID);


OnPostReport
Code:
ExcelBuffer.GiveUserControl();


SheetName sollte eine Variable sein, die bei jeder Ausgabe einen anderen Wert hat.

Hoffe, das hilft dir weiter.