Datenimport aus verschiedenen Excel-Sheets

10. September 2009 08:37

Guten Morgen an alle Leser,

ich habe ein kleines Problemchen beim Import von Excel Daten:
Aufgabe ist es nämlich Daten aus mehreren Excel-Sheets zu importieren. Dabei gibt es auch noch die Schwierigkeit,dass die Excel-Sheets immer verschiedene Namen haben und trotzdem alles automatisch eingelesen werden soll. :?: :?:

Des Export von Daten in mehrere Excel-sheets habe ich hier gefunden:
http://www.msdynamics.de/viewtopic.php?f=33&t=4315

Aber für den Import habe ich leider nichts gefunden. Hoffe mir kann jemand helfen :roll:

Grüße
Eding

Re: Datenimport aus verschiedenen Excel-Sheets

10. September 2009 08:43

Als technischer Einstieg sollte dir der Standard-Report 7131 dienen. Schaue dir hierzu die Funktionen ReadExcelSheet und AnalyseData (Aufruf im OnPreReport)an. Das DataItem Item Budget Buffer braucht du dir nicht anzuschauen.

Dieses Objekt liest aus genau einem Datenblatt einer ausgewählten Exceldatei (aus Request Form) Daten in den Excelbuffer, der wiederum in AnalyseData in eine Tabelle übertragen wird.

Dieses Prinzip brauchst du für deine Zwecke nur zu erweitern.

Re: Datenimport aus verschiedenen Excel-Sheets

10. September 2009 09:10

Vielen Dank Natalie,

ich werde mir das ganze mal gründlich anschauen und wenn Fragen sind, melde ich mich hier noch einmal...

Grüße
Eding


EDIT:

So ich habe mir das ganze mal angeschaut. Wie bekomme ich es denn nun hin, dass er mir alle automatisch auswählt und nacheinander abarbeitet :?: :?: :?:

Re: Datenimport aus verschiedenen Excel-Sheets

10. September 2009 11:16

habe das ganze gelöst. und zwar folgendermaßen

Der Afuruf ist folgender:
Code:
NumberOfSheets := ExcelBuf.NumberOfSheetsInWorkbook(FileName);
i := 1;
IF 1 = 1 THEN;
WHILE i <= NumberOfSheets DO BEGIN
  SheetName := ExcelBuf.SelectMultiSheets(i);
  ExcelBuf.OpenBook(FileName,SheetName);
  ExcelBuf.ReadSheet;
  DatenAnalysieren();
  i +=1;
END;

DatenAnalysieren ist ein wenig abgeschaut aus Report 7131.

hier die 2 neuen Funktionen,die wie folgt aussehen:
Code:
NumberOfSheetsInWorkbook(FileName : Text[250]) : Integer
IF NOT ISSERVICETIER THEN BEGIN
  IF NOT EXISTS(FileName) THEN
    ERROR(Text003,FileName);
END;

IF NOT CREATE(XlApp,TRUE,TRUE) THEN
  ERROR(Text000);
XlApp.Workbooks.Open(FileName);
XlWrkBk := XlApp.ActiveWorkbook;
i := 1;
EndOfLoop := XlWrkBk.Worksheets.Count;
WHILE i <= EndOfLoop DO BEGIN
  XlWrkshts := XlWrkBk.Worksheets.Item(i);
  SheetName := XlWrkshts.Name;
  IF (SheetName <> '') AND (STRLEN(SheetNames) + STRLEN(SheetName) < 250) THEN
    SheetNames := SheetNames + SheetName + ','
  ELSE
    i := EndOfLoop;
  i := i + 1;
END;
XlWrkBk.Close(FALSE);
XlApp.Quit;
CLEAR(XlApp);

EXIT(EndOfLoop);

dort lege ich einmal die sheet-Names fest und die Anzahl der Arbeitsmappen

Code:
SelectMultiSheets(SheetNumber : Integer) : Text[250]
  EXIT(SELECTSTR(SheetNumber,SheetNames))


Diese Funktion gibt mir den entsprechenden Namen zurück

Hoffe ich konnte auch anderen damit helfen.

Gruß
Eding