Imp. einer XLS Tabelle über einen Dataport in mehrere Tables

4. Mai 2007 08:27

Hallo zusammen,

ich habe folgende Aufgabe bekommen und stehe gerade ein bisschen auf dem Schlauch da ich das ganze noch nicht gemacht habe und in der Schulung letzter Woche auch nicht behandelt wurde ;) Leider haben heute mal wieder sehr viele Urlaub genommen und so wende ich mich hoffnungsvoll an euch ;)

Ich habe hier eine Excel File liegen die aus mehreren Sheets besteht die jeweils mit gewissen Daten gefüllt sind. Jetzt soll diese einfach über einen Dataport importiert werden und jedes Sheet in eine unterschiedliche Tabelle gelesen werden.

Über jegliche Art von Tutorial oder Lösungsweg bin ich sehr dankbar ;)

4. Mai 2007 08:53

Kleiner Tipp: Suche mal hier im Forum nach Excel Buffer, da wirst du sicher zahlreiche Tipps finden.

4. Mai 2007 09:19

weitere möglichkeit:
jedes Sheet als Text(MSDOS) unter eigenem Namen speichern
Dataport für jede Tabelle erstellen und damit die Textdateien einlesen.
Ist wahrscheinlich für einen Anfänger einfacher als der Umgang mit Excel-Buffer.

4. Mai 2007 09:31

Erstmal vielen Dank für die Antworten ;)

Hab auch ein paar Einträge hier im Forum gefunden die mir das ganze etwas verdeutlichen, dennoch kommen da ein paar Fragen auf :

In einem Fall ist folgendes Beispiel gegeben ...

Code:
ExcelBuffer.OpenBook('C:\Test.xls', 'Blattname');


Ich will aber jetzt nicht eine Datei einlesen die schon irgendwo liegt, sondern der User soll auswählen können welche er importieren möchte. Wenn ich den Dataport starte kommt ja eine Art RequestForm, allerdings kann ich dem Eingabefeld keine Variable o.ä. zuweißen.

Des weiteren will ich ja mehrere Tabellen füllen. Muss ich da jetzt für jede Table ein eigenes DataItem anlegen oder reicht es die Tabellen als Record anzulegen und diese dann so anzusprechen. Dann aber die Frage in welchen Trigger das ganze muss.

@ Michael : Ja hab ich auch schon überlegt das ganze irgendwie in kleinerer Form zu gestalten, da aber später darauf noch aufgebaut wird und es erweitert wird soll das ganze nunmal als Excel gemacht werden :(

Problem ist halt nur dass die Navision Hilfe selber nicht allzuviel hergibt und wenn ihr euch hier wie die Lehrer eines dummen Neulings vorkommt, tut es mir leid :)

4. Mai 2007 09:44

für die Dateiauswahl kannst du die Funktion OpenFile aus der CodeUnit 412 Common Dialog Management verwenden.

4. Mai 2007 10:09

Super, werd ich gleich mal antesten.

Hab jetzt erstmal fix den Pfad vorgegeben und konnte auch den ersten Sheet erfolgreich importieren.

Edit :

Bin gerade über das nächste Problem gestolpert. Und zwar gibt es ein Feld "Nr." in der Tabelle das an Hand einer Nummernserie gefüllt wird sobald ich Enter drücke. Wie stelle ich das an das es auch im Import funktioniert ? Habe es versucht in dem ich den VALIDATE Trigger des Tabellen Feldes aufrufe aber das will nicht so wirklich.

4. Mai 2007 10:24

Hallo Chris!

CBT hat geschrieben:Bin gerade über das nächste Problem gestolpert. Und zwar gibt es ein Feld "Nr." in der Tabelle das an Hand einer Nummernserie gefüllt wird sobald ich Enter drücke. Wie stelle ich das an das es auch im Import funktioniert ?

Das gleiche Problem hatte ich auch mal. Schau dir das Topic Daten per Dataport einlesen und VALIDATE ausführen an.

Gruß, Marc

4. Mai 2007 13:37

Ich importiere Exceldaten immer mit einem report und dem Excelbuffer
Als Anlage ein kleines Beispiel

mfg Michael
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

7. Mai 2007 09:40

So. Bisher funktioniert alles nach kurzem Hin und Her ohne Probleme. Dickes Danke schön an dieser Stelle. Dennoch hab ich ein kleines Konvertierungsproblem. Ich weisse die Excel Inhalte ja über "Cell Value as Text" den einzelnen Tabellen zu.

Also z.B.

Code:
 record.x := recExcel."Cell Value as Text";


Jetzt ist aber x auch mal eine Decimal Zahl oder ein Date o.ä. und da jetzt die Frage : Wie wendel ich das um ? Über FORMAT hab ichs schon probiert, will aber nicht so recht. Andere Befehle wie beispielsweise STRTO... gibt es auch keine. Und eine Funktion wie beispielsweise "Cell Value as Date" hat er mir auch verweigert ;)

7. Mai 2007 09:44

dafür gibt's den Befehl EVALUATE(Zielvariable,Textvariable)

7. Mai 2007 10:14

Ich denke mal wieder viel zu umständlich, sry ;)
Hat wunderbar funktioniert.

Was ich hier noch gerade sehe. Ich glaube du hattest mich letzte Woche mit dem Open Dialog falsch verstanden. Ich wollte keinen neuen anlegen bzw. machen sondern den Standart verwenden der erscheint wenn ich auf die 3 Punkte zum Importieren klicke.

Ich hatte einfach nur CurrDataport.FILENAME gesucht :)

Nochmal dickes Danke schön an alle.

16. Mai 2007 12:56

Mir ist das gerade noch was beim Import aufgefallen. Über folgenden Code weise ich den einzelnen Tabellen die Inhalte der Excel Tabelle zu :

Code:
recWertsache.VerwahrgelassNummer := recExcel."Cell Value as Text";


VerwahrgelassNummer ist vom Typ Code. Wie stell ich jetzt z.B. an dass wenn dort eine 1 steht diese auf vier Stellen mit Nullen aufgefüllt wird, also statt der 1 eine 0001 dort steht. Ich hatte hier was ähnliches im Board durch die SuFu gefunden, allerdings funktionierte das nicht wirklich mit dem Cell Value As Text und ich habe leider keine Ideen mehr.

16. Mai 2007 13:50

Code:
recWertsache.VerwahrgelassNummer :=
  padstr('0000',4-strlen(recExcel."Cell Value as Text")) + recExcel."Cell Value as Text";

29. Mai 2007 16:14

Nochmal vielen Dank an dieser Stelle.
Hat alles wunderbar geklappt und der Dataport ist soweit fertig und funktioniert ohne Probleme. Zumindest auf meinem Rechner ;)

Bei der Ausführung des Dataports auf einer anderen Maschine kommt folgende Fehlermeldung :

Code:
Diese Meldung ist für C/AL-Programmierer:

Der Member Open konnte nicht verarbeitet werden. Das OLE-Objekt gab die folgende Meldung zurück:
Der angeforderte Member ist nicht vorhanden,
oder der Aufruf versuchte, den Wert
einer schreibgeschützten Eigenschaft zu verändern.


Hab zuerst die Vermutung gehabt dass es vielleicht da dran liegt dass auf dem Rechner kein Excel bzw. Office installier ist, aber dem war nicht so. Jemand eine Idee an was das liegen könnte ?

29. Mai 2007 19:04

andere Excel-Version?
oder die Excel-Datei kann da nicht gefunden oder zum schreiben geöffnet werden?

30. Mai 2007 08:08

Was heisst andere Excel Version ? Normalerweise sollte eine *.xls File doch abwärtskompatibel sein. Die lässt sich zumindest manuell in Excel öffnen. Gefunden werden muss sie auch, da man den Speicherort ja auswählt. Attribute wie beispielsweise Schreibschutz o.ä. sind auch nicht gesetzt.